
加载中…
个人资料
LEON
- 博客等级:

- 博客积分:0
- 博客访问:1,097
- 关注人气:10
- 获赠金笔:0支
- 赠出金笔:0支
- 荣誉徽章:
【原创】Qt 窗体之间通信
(2011-07-04 08:45:35)
Qt中不允许定义全局变量,我们无法简单地实现窗体之间的传值,例如 弹出式登录框..
可以利用信号槽机制实现传值,QInputDialog 貌似也是这么实现的。
首先构造两个对话框类Parent 和 Child,其界面如下:
class Parent : public QDialog
{
Q_OBJECT
public:
Parent();
QLineEdit
*lineEdit;
QLabel
*pLabel;
QPushButton
*childBtn;
QPushButton
*qBtn;
Child
*c;
//子窗体
public slots:
void
infoRecv(const QString &); //消息接收 槽函数
void
childCreate();
//创建子窗体 槽函数
};
//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(const QString &)),
this,SLOT(infoRecv(const QString &)));
//消息发送与接收
}
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:
void
infoSend(const QString &); //定义消息发送信号
public slots:
void
emit_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()
{
const
QString txt = lineEdit->text();
emit
infoSend(txt);
}
结果如下图
喜欢
0
赠金笔
加载中,请稍候......