【发布时间】:2016-06-02 07:56:02
【问题描述】:
我正在尝试创建一个函数,该函数将根据传递给它的 QWidget 显示一个小部件。
我有:
position_widget = new positionWidget();
timing_widget = new timingWidget();
...
void MainWindow::showScreen(QWidget *w)
{
ui->screenWidget->layout()->addWidget(w);
w->show();
}
void MainWindow::doConnects()
{
QObject::connect(buttons_widget, SIGNAL(showPositionScreen_signal()), this, SLOT(showScreen(position_screen)));
QObject::connect(buttons_widget, SIGNAL(showTimingScreen_signal()), this, SLOT(showScreen(timing_screen)));
}
当我单击按钮时没有任何反应,它出现“没有这样的插槽 MainWindow::ShowScreen(timing_screen)”
【问题讨论】:
-
应该是
SLOT(showScreen(QWidget *)) -
使用 Qt Creator 的自动完成功能来完成信号和插槽,尤其是使用 ole 样式连接(使用 SIGNAL 和 SLOT 宏)。如果你弄错了,更喜欢新的风格连接你得到编译错误的地方。
-
@thuga 使用值而不是插槽宏的类型与您指出的问题类似,但他的信号和插槽中的参数不匹配也存在问题
-
@tobilocker 两个问题的参数不匹配。
-
@thuga 在这两种情况下,都会发出不带任何参数的信号,并且尝试连接到具有信号宏中值的插槽。你是对的 - 但我看到了一个区别:在这种情况下,用户想要发出自定义信号,而在另一个问题中,用户想要使用
QAbstractButton的clicked()信号(我实际上看不到任何用途 -案例)
标签: qt signals signals-slots qwidget qt-signals