前言
在一个界面上获取数值,发送信号,跳转到另一个界面的槽,实现两个界面的交互,信息传递。
学习自:Qt Creator 快速入门第三版 霍亚飞 编著
例子为: 基类QWidget,主界面创建一个“Qt设计师界面类”,界面模板选择Dialog without Buttons,在对话框中输入数值,单击确定按钮时关闭对话框,并将输入的数值通过信号发射出去,主界面接收到信号,label显示数值。
程序
在mydialog.h中自定义信号:
signals:
void dlgReturn(int); //自定义的信号
在mydialog.ui中, 放入数值选择spin box和按钮pushbutton
转到“确认"按钮的信号槽,到mydialog.cpp中
void MyDialog::on_pushButton_clicked()
{
int value = ui->spinBox->value(); //获取输入的数值
emit dlgReturn(value); //发射信号
close(); //关闭对话框
}
在widget.h中,自定义槽函数:
private slots:
void showValue(int value);
在widget.ui中,放入label显示数值
在widget.cpp中,1.构造函数中,创建dialog实例,连接自定义信号和槽
MyDialog *dlg = new MyDialog(this);//创建一个Mydialog实例dlg
connect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int))); //将对话框中的自定义信号与主界面中的自定义槽进行关联
dlg->show();
在调用该connect()函数时,信号和槽的参数只能有类型,不能有变量名,如:写成SLOT(showValue(int value))是不对的。
在Qt5中加入了重载形式,更加简便易检查,建议使用
代替代码
connect(dlg,&MyDialog::dlgReturn,this,&Widget::showValue);
可以再关联时直接编写信号发射后要执行的代码:
connect(dlg,&MyDialog::dlgReturn,[=](int value){
ui->label->setText(tr("获取的值是:%1").arg(value));
2.自定义槽函数
void Widget::showValue(int value) //自定义槽
{
ui->label->setText(tr("获取的值是:%1").arg(value));
}
运行结果