子窗口与父窗口交互
来源:互联网 发布:淘宝s挂钩 编辑:程序博客网 时间:2024/05/16 07:36
项目中一直想实现的功能子窗口dialog为文件选择窗口,选择文件点击确认关闭后,父窗口中打开指定文件。
是自己建的文件窗口,没有用到
Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ", tr("Allfile(*.*);;mp3file(*.mp3)"));
所以只好自己摸索一下;
基本思路:
①在子窗口中声明信号
②在主窗口中声明并实现槽函数
③在主窗口中connect绑定信号和槽
④子窗口中发送信号(emit)
代码:子窗口声明:
signals:
void loadfilesignal(int);主窗口声明:
public slots:
void openfile()主窗口槽函数:
void MainWindow::openfile()
{
QImage test;
test.load(Loadfile::open_filename);
f->resize(test.width(),test.height());
f->setPixmap(QPixmap::fromImage(test));
QFileInfo fi(Loadfile::open_filename);
d->setText(fi.fileName());
qDebug()<<"open file !";
qDebug()<<Loadfile::open_filename;
}用于打开指定图片
主窗口绑定:
void MainWindow::loadfile()
{
loadfile1 = new Loadfile(this);
//不能在mainwindow的构造函数中绑定
connect(loadfile1,SIGNAL(loadfilesignal(int)),this,SLOT(openfile()));
loadfile1->show();
}注意:
这个分析得很好
①connect()绑定函数,如果放到主窗口的构造函数中,此时,子窗口的类还没新建对象,没有分配内存地址,如果new一个对象,程序不会报错(搜一下,有好新手跟我一样有这个疑问),但是新建的子窗口对象与通过主窗口的点击按钮后,新建的子窗口对象是两码事,在内存中是两个不同的地址,我们要绑定的应该是后者与主窗口的信号槽绑定,所以,connect函数应该放到主窗口点击子窗口按钮代码里面。
②connect()绑定函数,如果放到子窗口的构造函数中,发送用this,接收用主窗口指针,原理一样,如果此处新建主窗口对象,然后建立连接,其实内存中有两个主窗口对象了,绑定的并不是我想显示日志信息的主窗口对象,此处可以直接调用出窗口已新建好对象的指针。
③connect(),在子窗口和主窗口交互的过程中,其实放到哪里不重要,重要的是发送和接收的指针一定要是已新建好的主窗口/子窗口对象的指针,并且确保是新建好后再执行该connect()绑定函数。子窗口发射信号:
按下按钮后触发函数,发射信号并关闭dialog
void Loadfile::loadfiler()
{ QString *fn = new QString;//获取选择对象QModelIndex nindex = ui->treeView->currentIndex() ;//currentindex这个函数不知哪里来的if(pathvalue){*fn = local_model->filePath(nindex);}
else*fn = move_model->filePath(nindex);//加工变量open_filename.clear();open_filename.append(*fn);// qDebug()<<"loadfiler"+open_filename;//上面是为了获得所选文件
emit Loadfile::loadfilesignal(1);//这里!!!!!!!!!!!!
this->close();
}
阅读全文
0 0
- 父窗口与子窗口交互
- 子窗口与父窗口交互
- GridView 子父窗口 交互
- jquery 获取父窗口的元素 父窗口与子窗口间交互
- html 弹出窗口与父窗口交互
- 弹出窗口与父窗口交互
- C#子窗口与父窗口交互(使用委托和事件)
- C#子窗口与父窗口交互(使用委托和事件)
- C#子窗口与父窗口交互(使用委托和事件)
- MFC主窗口出现之前弹出子窗口与子窗口交互问题
- 父窗口和子窗口的数据交互
- 父窗口和子窗口之间的交互
- javascript关于Iframe父窗口和子窗口交互
- VC子窗口与父窗口通信
- 父窗口与子窗口的操作
- flex 父窗口与子窗口通信
- Iframe父窗口与子窗口
- 子窗口与父窗口之间消息
- U-boot的工作流程分析-2440
- 如何更改linux文件的拥有者及用户组(chown和chgrp)
- elf文件格式总结
- HDU
- 2017.8.9Philips Weng讲座总结
- 子窗口与父窗口交互
- 输入框自动补全js代码
- 1、Velocity概念
- Servlet 生命周期详解
- Hadoop HDFS SingleCluster安装
- 中国部分城市地震危险度排名
- 字符串截取函数slice, substring, substr
- 转eclipse安装git
- cocos2dx 3.10 读取加密压缩ZIP文件