Qt 代码: 子窗口调用父窗口
2014-08-31 03:57
127 查看
之前的 Qt 编程大多只涉及简单的多窗口,并未染指窗口间的传值交互,想来还是“涉世未深”,对 Qt 的理解、应用还需殷勤努力。
这次的问题是这样的,我想要实现一个类似QQ、阿里旺旺的聊天客户端,在弹出表情对话框后,能够选择表情并返回给聊天窗口的消息输入框,这就需要两个窗口之间的传值交互。
首先想到的解决方法自然是使用Qt自带的signal/slot机制。即首先发信号给父窗口,父窗口接到信号执行槽函数发送一个携带所需数据的信号给子窗口。但是疑问来了:要在子窗口中接收到父窗口的信号必须进行signal和slot的绑定。这需要主窗口类的定义(1)。担心头文件的递归包含,我们只好再想另外一个方法。直接在子窗口中利用指向父窗口的指针来访问父窗口类的成员怎么样?
说做就做,先写一个测试代码来试试。
mainwindow.ui 中有一个lineedit和pushbutton,点击之后弹出Dialog实例;dialog.ui 中有一个pushbutton,点击之后修改mainwindow中的lineedit的文本内容。
代码如下:
(1) mainwindow.h
(2) mainwindow.cpp
(3) dialog.h
(4) dialog.cpp
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1) | 评论(0) | 转发(0) |
0
上一篇:Qt 代码: QMessageBox 用法
下一篇:Qt 代码: Qt布局与分割器QSplitter
相关热门文章
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
给主人留下些什么吧!~~
评论热议
这次的问题是这样的,我想要实现一个类似QQ、阿里旺旺的聊天客户端,在弹出表情对话框后,能够选择表情并返回给聊天窗口的消息输入框,这就需要两个窗口之间的传值交互。
首先想到的解决方法自然是使用Qt自带的signal/slot机制。即首先发信号给父窗口,父窗口接到信号执行槽函数发送一个携带所需数据的信号给子窗口。但是疑问来了:要在子窗口中接收到父窗口的信号必须进行signal和slot的绑定。这需要主窗口类的定义(1)。担心头文件的递归包含,我们只好再想另外一个方法。直接在子窗口中利用指向父窗口的指针来访问父窗口类的成员怎么样?
说做就做,先写一个测试代码来试试。
mainwindow.ui 中有一个lineedit和pushbutton,点击之后弹出Dialog实例;dialog.ui 中有一个pushbutton,点击之后修改mainwindow中的lineedit的文本内容。
代码如下:
(1) mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void setLineText(QString str); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H |
#include "mainwindow.h" #include "ui_mainwindow.h" #include "dialog.h" #include "ui_dialog.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { Dialog subwin(this); //"this" is very important. subwin.setGeometry(x()-100, y()+100, wifth()-100, height()-100); subwin.exec(); //needed. } void MainWindow::setLineText(QString str) { ui->lineEdit->setText(str); } |
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private slots: void on_pushButton_clicked(); private: Ui::Dialog *ui; }; #endif // DIALOG_H |
#include "dialog.h" #include "ui_dialog.h" #include "mainwindow.h" #include "ui_mainwindow.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); } Dialog::~Dialog() { delete ui; } void Dialog::on_pushButton_clicked() { MainWindow *ptr = (MainWindow*)parentWidget(); //"parentWidget" very important. 获得父部件指针,同时需要类型强转.[/u] ptr->setLineText("i can do it, too."); close(); } |
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1) | 评论(0) | 转发(0) |
0
上一篇:Qt 代码: QMessageBox 用法
下一篇:Qt 代码: Qt布局与分割器QSplitter
相关热门文章
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
给主人留下些什么吧!~~
评论热议
相关文章推荐
- Qt 代码: 子窗口调用父窗口(其实就是用指针直接访问)
- 调用Shell接口(系统运行窗口)的代码
- ASP.NET 模式窗口中调用后台代码
- vs 2010调用matlab dll显示窗口核心代码
- Qt代码调整窗口初始大小
- 使用Qt / C + +通过JNI调用Java代码
- 在<iframe>内嵌窗口中调用父窗口的javascript代码
- qt关闭窗口实现逐渐消失代码
- vs 2010调用matlab dll显示窗口核心代码
- QT设置窗口模态 进程调用外部程序和入参
- QT中调用JAVA代码
- [转]在<iframe>内嵌窗口中调用父窗口的javascript代码
- Java代码中调用批处理和打开命令行窗口
- 关于在右下脚弹出窗口javascript代码,并用ASP.NET在后台调用(原创)
- vs 2010调用matlab dll显示窗口核心代码
- 在内嵌窗口中调用父窗口的javascript代码
- 在Qt代码里调用js中的函数
- QT登陆窗口代码
- 使用Qt Designer和手动编写代码两种方式实现多窗口切换程序(Qt基础)
- qt 子窗口调用父窗口的函数