用信号和槽实现两个对话框传送数据
最近搞个Qt的项目,用到了两个对话框dialog传送一个字符型的数据,纠结了好多天还是没有琢磨透,在网上也找了好多资料,自己摸索,总算有点了头绪,但是不知道这样好不好,自己感觉似乎存在着问题。
我现在简单的描述下我的demo :
dialog1中有一个lineEdit 三个button

dialog2中只有一个lineEdit:

点击dialong的button1和button2,LineEdit的标签会被设置为1或者2.点击Ok,会生成dialog2对话框,并且dialog2的LineEdit会被设置成dialog1的editline标签。
我实现的代码如下:
dialog1.h
dialog1.cpp
dialog2.h
dialog2.cpp
main.cpp
现在我的问题是:
(1) 这样定义的信号和槽,有没有问题。还有没有其他方法。
(2) 我在dialog1中把dialog2设置为它的成员变量。在构造函数就new了dialog2 ,而在我点击OKbutton时,才把dialog2显示出来,这样是不是在空间上有所浪费呢?
(3) 在
谢谢各位朋友赐教,大家一起学习!!!!
我现在简单的描述下我的demo :
dialog1中有一个lineEdit 三个button

dialog2中只有一个lineEdit:

点击dialong的button1和button2,LineEdit的标签会被设置为1或者2.点击Ok,会生成dialog2对话框,并且dialog2的LineEdit会被设置成dialog1的editline标签。
我实现的代码如下:
dialog1.h
#ifndef DIALOG1_H
#define DIALOG1_H
#include <QDialog>
#include "dialog2.h"
namespace Ui {
class Dialog1;
}
class Dialog1 : public QDialog
{
Q_OBJECT
public:
explicit Dialog1(QWidget *parent = 0);
~Dialog1();
signals:
void selectedButton(QString text) ;
private:
Ui::Dialog1 *ui;
Dialog2 *dlg ;
private slots:
void button1() ;
void button2() ;
void ok() ;
};
#endif // DIALOG1_H
dialog1.cpp
#include "dialog1.h"
#include "ui_dialog1.h"
Dialog1::Dialog1(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog1)
{
ui->setupUi(this);
connect(ui->pushButton1 ,SIGNAL(clicked()) ,this ,SLOT(button1())) ;
connect(ui->pushButton2 ,SIGNAL(clicked()) ,this ,SLOT(button2())) ;
connect(ui->pushButton3 ,SIGNAL(clicked()) ,this ,SLOT(ok())) ;
dlg = new Dialog2() ;
connect(this ,SIGNAL(selectedButton(QString)) ,dlg ,SLOT(updateNum(QString)) ) ;
}
Dialog1::~Dialog1()
{
delete ui;
}
void Dialog1::button1()
{
ui->lineEdit->setText("1");
}
void Dialog1::button2()
{
ui->lineEdit->setText("2");
}
void Dialog1::ok()
{
QString name = ui->lineEdit->text() ;
emit selectedButton(name) ;
// dlg = new Dialog2() ;
// connect(this ,SIGNAL(selectedButton(QString)) ,dlg ,SLOT(updateNum(QString)) ) ;
dlg->show();
}
dialog2.h
#ifndef DIALOG2_H
#define DIALOG2_H
#include <QDialog>
namespace Ui {
class Dialog2;
}
class Dialog2 : public QDialog
{
Q_OBJECT
public:
explicit Dialog2(QWidget *parent = 0);
~Dialog2();
private:
Ui::Dialog2 *ui;
private slots:
void updateNum(QString text) ;
};
#endif // DIALOG2_H
dialog2.cpp
#include "dialog2.h"
#include "ui_dialog2.h"
Dialog2::Dialog2(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog2)
{
ui->setupUi(this);
}
Dialog2::~Dialog2()
{
delete ui;
}
void Dialog2::updateNum(QString text)
{
ui->lineEdit2->setText(text);
}
main.cpp
#include "dialog1.h"
#include "dialog2.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog1 dlg1;
// Dialog2 dlg2 ;
// //信号和槽绑定
// QObject::connect(&dlg1 ,SIGNAL(selectedButton(QString)) ,&dlg2 ,SLOT(updateNum(QString))) ;
dlg1.show();
// dlg2.show();
return a.exec();
}现在我的问题是:
(1) 这样定义的信号和槽,有没有问题。还有没有其他方法。
(2) 我在dialog1中把dialog2设置为它的成员变量。在构造函数就new了dialog2 ,而在我点击OKbutton时,才把dialog2显示出来,这样是不是在空间上有所浪费呢?
(3) 在
void Dialog1::ok()
{
QString name = ui->lineEdit->text() ;
emit selectedButton(name) ;
// dlg = new Dialog2() ;
// connect(this ,SIGNAL(selectedButton(QString)) ,dlg ,SLOT(updateNum(QString)) ) ;
dlg->show();
}
中,emit信号后,程序怎么运行?谢谢各位朋友赐教,大家一起学习!!!!
...全文
相关推荐
初学QT对话框,一个按钮的实现,目的是学着QT的信号和槽,还有使用QTCreator结合QT 设计器的方法
初学,这是我写的第一个QT对话框程序,其中只有一个按钮的实现方式,单击按钮弹出来一个提示。具体的实现步骤在我的Blog中有详细介绍!目的是学着QT的信号和槽,还有使用QTCreator结合QT 设计器的方法。
HyperLynx(十七)SATA的设计与仿真
SATA总线使用嵌人式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在干能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。由上图可以看出,当入侵信号为5V的单端信号时,在之前的参数设置下,眼图图像很不规范,不符合要求,明显可以看出串扰的影响很大。结果显示,实际的信号对应眼膜中央的部分留有很大的余量;得到的仿真结果如上图所示,这次的结果就不大符合眼膜的规格了,清楚地显示了在有损仿真模式下的信号损失衰减情况,明显没有满足眼膜的规格要求。
Qt 源代码 - 06_信号和槽(二)自定义信号和槽的实例
06_信号和槽(二)自定义信号和槽的实例 源代码
Qt的8个内建对话框&多个信号连接单个槽demo
Qt的8种对话框、多个信号连接一个槽、将Qt的英文菜单翻译为中文的方法。。。
Qt信号和槽
信号与槽机制是qt的核心,一个信号可以接多个槽,多个信号也可以接一个槽,当然一个信号也可以接一个槽。本文的重点是讲述emit的应用,emit是qt中定义的宏,是用来发送一个信号,然后你再写一个槽函数。在构造函数中,通过connect函数将此信号与你所写的槽连接起来,即可使用。


