我与QT Creator 4.9.1一起工作,并且与设计师进行了GUI协商。我有一个带有StackedWidget的MainWindow,大约有60页,在我的主窗口中有一个按钮,带有onButton_clicked
信号,我打开一个对话框(显示图片)以插入数字以设置用户想要查看的页面在主窗口中。
我的问题是,信号来自对话框,名称为on_pushButton_Enter_clicked
,我的插槽位于主窗口中,名称为setCurrentIndex()
。我已经阅读了以下文章:“如何将MainWindow的信号连接到对话框中的插槽”和“使用信号和插槽Qt连接主窗口和对话框”。
但这对我没有帮助,因为我的对话框不知道我的主窗口,也不知道如何连接它们。
信号:
Dialognummer_eingeben.h
...
signals:
void enterButtonPressed();
...
void Dialognummer_eingeben::on_pushButton_Enter_clicked()
{
QString text = ui->lineEdit_Dialognummer->text();
ui->lineEdit_Dialognummer->setText("");
this->reject();
emit enterButtonPressed();
}
广告位:
Terminal::Terminal(QWidget *parent) : QMainWindow(parent), ui(new Ui::Terminal)
{
ui->setupUi(this);
QObject::connect(&dialog, SIGNAL(enterButtonPressed()), this, SLOT(setCurrentIndex()));
}
void Terminal::setCurrentIndex()
{
int num = dianr.getNum();
QString strNum = QString::number(num);
switch(num)
{
....
}
}
编辑:1.添加信号和插槽代码 2.在代码内进行一些更改
答案 0 :(得分:1)
在我的主窗口中,我有一个按钮,通过onButton_clicked信号,我打开一个对话框(显示图片)以插入数字来设置用户想要在主窗口中看到的页面。
您还必须在对话框类中添加一个信号,一旦按回车按钮,应使用on_pushButton_Enter_clicked
作为功能,否则该信号应发出。在对话框类中添加一个信号,例如“ enterButtonPressed()”,并在函数on_pushButton_Enter_clicked
中发出该信号。
在主窗口内(在创建对话框的某个位置)添加以下行:
connect(dialog, SIGNAL(enterButtonPressed()), this, SLOT(SlotNameWhichShouldGetCalled()));
编辑:即使以上解决方案可行,我仍然想到了一个更好的解决方案。 通常,您应该使用QDialog :: accepted信号进行连接(请参见https://doc.qt.io/archives/qt-4.8/qdialog.html#accept)。
具体步骤:
on_pushButton_Enter_clicked()
中添加accept()
而不是this-reject()
(我想您希望对话框成功关闭而不是被拒绝吗?)通过添加连接到QDialog :: accepted()信号
QObject::connect(&dialog, SIGNAL(accepted()), this, SLOT(setCurrentIndex()));
另外,请确保connect(...)函数没有错误。如果找不到信号/插槽或信号/插槽不匹配,您应该在Qt Creator的应用程序输出中看到一些内容