加载中…
个人资料
LEON
LEON
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,097
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【原创】Qt 窗体之间通信

(2011-07-04 08:45:35)
    Qt中不允许定义全局变量,我们无法简单地实现窗体之间的传值,例如 弹出式登录框.. 可以利用信号槽机制实现传值,QInputDialog 貌似也是这么实现的。
    首先构造两个对话框类Parent 和 Child,其界面如下:
http://s13/middle/511cc1ebga733ff4dd3ec&690窗体之间通信" TITLE="【原创】Qt 窗体之间通信" />

//parent.h
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);
}

http://s14/middle/511cc1ebga734179eb6fd&690窗体之间通信" TITLE="【原创】Qt 窗体之间通信" />


//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);
}

结果如下图

http://s5/middle/511cc1ebg771ed1de7814&690窗体之间通信" TITLE="【原创】Qt 窗体之间通信" />


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有