QT 窗体间通信
来源:互联网 发布:淘宝上怎么搜高仿鞋 编辑:程序博客网 时间:2024/05/23 11:57
多窗体的实现我们可以在
方法
首先构造两个对话框类Parent和 Child,其界面如下:
//parent.h
{
Q_OBJECT
public:
Parent();
QLineEdit*lineEdit;
QLabel*pLabel;
QPushButton*childBtn;
QPushButton*qBtn;
Child *c; //子窗体
public slots:
voidinfoRecv(const QString &); //消息接收 槽函数
voidchildCreate(); //创建子窗体槽函数
};
//parent.cpp
Parent::Parent()
{
setWindowTitle("Parent");
lineEdit= new QLineEdit;
pLabel= new QLabel("infoRecv: ");
childBtn= new QPushButton("childUi");
qBtn= new QPushButton("Quit");
QGridLayout*layout = new QGridLayout(this);
layout->addWidget(pLabel,0,0);
layout->addWidget(lineEdit,0,1);
layout->addWidget(childBtn,1,0);
layout->addWidget(qBtn,1,1);
c= new Child();
this->resize(300,200);
connect(qBtn,SIGNAL(clicked()),this,SLOT(reject())); //关闭主窗体
connect(childBtn,SIGNAL(clicked()),this,SLOT(childCreate()));//创建子窗体
connect(c,SIGNAL(infoSend(constQString &)),
this,SLOT(infoRecv(constQString &))); //消息发送与接收
}
void Parent::childCreate()
{
c->exec();
}
void Parent::infoRecv(const QString &str)
{
lineEdit->setText(str);
}
//child.h
class Child : public QDialog
{
Q_OBJECT
public:
Child();
QLineEdit*lineEdit;
QLabel*pLabel;
QPushButton*tBtn;
QPushButton*qBtn;
signals:
voidinfoSend(const QString &); //定义消息发送信号
public slots:
voidemit_signal_infosend(); //Send按钮单击事件连接的槽函数,目的为发射infoSend信号
};
//child.cpp
Child::Child()
{
setWindowTitle("Child");
lineEdit= new QLineEdit;
pLabel= new QLabel("infoSend: ");
tBtn= new QPushButton("Send");
qBtn= new QPushButton("Quit");
QGridLayout*layout = new QGridLayout(this);
layout->addWidget(pLabel,0,0);
layout->addWidget(lineEdit,0,1);
layout->addWidget(tBtn,1,0);
layout->addWidget(qBtn,1,1);
this->resize(300,200);
connect(qBtn,SIGNAL(clicked()),this,SLOT(close()));
connect(tBtn,SIGNAL(clicked()),this,SLOT(emit_signal_infosend()));
}
void Child::emit_signal_infosend()
{
constQString txt = lineEdit->text();
emitinfoSend(txt);
}
1:在一个创体内控制另一个窗体显示(信号,槽的使用)
2:在一个窗体内触发另一个窗体内的信号,槽,函数(信号,槽的使用)
3,在一个创体内修改另一个创体内部件的属性,值等
(指针使用)
方法
1----------main函数中控制a.showb.show(通过accept判断,下面将不再介绍此方法)
2-----------也可以用一个窗体的信号或槽来控制另一个窗体的显示和部件属性以及值
实例1---------------
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include "Form1.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void hide_main();
void show_main();
private:
Ui::MainWindow *ui;
Form1 form1;
};
#endif // MAINWINDOW_H
mainwindow.cpp
..............
....
void MainWindow::hide_main()
{
form1.show();
this->hide();
}
void MainWindow::show_main()
{
this->show();
}
......
...
#ifndef Form1_H
#define Form1_H
#include
namespace Ui {
class Form1;
}
class Form1 : public QWidget
{
Q_OBJECT
public:
explicit Form1(QWidget *parent = 0);
~Form1();
public slots:
void hide_form1();
signals:
void t();
private:
#endif
form1.cpp
......
.........
void Two::hide_form1()
{
emit t();
this->hide();
}
...........
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include "Form1.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void hide_main();
void show_main();
private:
Ui::MainWindow *ui;
Form1 form1;
};
#endif // MAINWINDOW_H
mainwindow.cpp
..............
....
void MainWindow::hide_main()
{
form1.show();
this->hide();
}
void MainWindow::show_main()
{
this->show();
}
......
...
#ifndef Form1_H
#define Form1_H
#include
namespace Ui {
class Form1;
}
class Form1 : public QWidget
{
Q_OBJECT
public:
explicit Form1(QWidget *parent = 0);
~Form1();
public slots:
void hide_form1();
signals:
void t();
private:
Ui::Form1*ui;
};#endif
form1.cpp
......
.........
void Two::hide_form1()
{
emit t();
this->hide();
}
...........
实例2-----------------------
1.建立一个工程
2.新建一个mainForm对话框
向其中添加几个按钮,其中的一个按钮show的功能是在mainForm中点击一个该按钮就能弹出另外一个窗体
showForm
3.创建一个main.cpp,将其主要窗体选为mainForm,则会自己创建一个已经写好了相关语句的main.cpp。
3.新建另外一个对话框showForm,将其属性中的name改为showForm,将该对话框保存为showForm.ui
4.在mainForm的member项中的includes(indeclaration)中加入"showForm.h",在Class varible中添加showForm*showForm;
5.将show按钮的click()信号与mainForm的一个新建的slot(showSlot)连接起来;
6.为showSlot()添加代码如下:
voidmainForm::showSlot()
{
showform=newshowForm(this);
showform->show();
}
7.qmake
make
这样就会生成可执行文件。
实例3-----------------------
Qt中不允许定义全局变量,我们无法简单地实现窗体之间的传值,例如 弹出式登录框..可以利用信号槽机制实现传值,QInputDialog 貌似也是这么实现的。
http://blog.sina.com.cn/s/blog_511cc1eb0100t00i.html
//parent.h
先载入child.h
classParent : public QDialog{
public:
public slots:
};
//parent.cpp
Parent::Parent()
{
}
void Parent::childCreate()
{
}
void Parent::infoRecv(const QString &str)
{
}
//child.h
class Child : public QDialog
{
public:
signals:
public slots:
};
//child.cpp
Child::Child()
{
}
void Child::emit_signal_infosend()
{
}
- QT 窗体间通信
- QT 窗体间通信
- QT 窗体间通信
- QT 窗体间通信
- 窗体通信
- qt 进程间通信
- QT---线程间通信
- QT进程间通信
- QT进程间通信
- QT---线程间通信
- Qt 窗口间通信
- QT-进程间通信
- qt多线程间通信
- Qt进程间通信
- Linux: 进程间通信
- Qt 窗体
- C#不同窗体间通信,数据传递
- 利用委托实现窗体间通信
- 编程小技巧
- 基于Qt的多窗口编程A--界面的设计
- Tomcat + 花生壳的JSP建站经验(转载)
- 基于Qt的多窗口设计B-窗体切换的实…
- Android之 BatteryService
- QT 窗体间通信
- QT——在tableview中显示数据库表中…
- 我今年二十三四岁(转)
- mysql数据表的创建、查看、删除和…
- Qt中QTableView中加入Check列实现(…
- 常量指针与指针常量的区别(转帖)
- 怎样写硕士论文
- 趣味C语言
- Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果