在我的项目中,我想调用mainwindow.h
中生成的变量QImage image
,在其他类文件中,例如,称为SegSetupDialog.h
。这里image
是通过点击mainwindow.ui
中的按钮加载的,SegSetupDialog
是一个QDialog
,通过点击mainwindow.ui
中的一个按钮弹出。
我尝试使用信号槽连接将mainwindow
qimage
发送到SegSetupDialog
,如下所示。
对于类主窗口:
SegSetupDialog *segsetup;
if(image.isNull()==false)
{
emit sendImgData(image);
qDebug()<<"sendImgData emitted!";
if(segsetup==NULL) segsetup = new SegSetupDialog();
connect(this, SIGNAL(sendImgData(QImage)),segsetup,SLOT(getImgData(QImage)),Qt::QueuedConnection);
}
In SegSetupDialog::getImgData
void SegSetupDialog::getImgData(QImage qimage)
{
qImg = qimage;
qDebug()<<"qimage received!";
}
上面的连接似乎不起作用,因为getImgData
中的qDebug消息没有打印出来。任何人都可以帮助检查代码的错误,或建议其他方法来访问mainwindow
image
?谢谢!!
您需要在发出信号之前进行信号/插槽连接。连接只完成一次,通常在构造函数中完成。
但是,您可能应该在 SegSetupDialog
的构造函数中执行connect()
,而不是MainWindow
构造函数。SegSetupDialog
希望收到有关图像数据更新的通知,因此您应该在那里建立连接。
此外,为了确保正确指定信号和插槽,请勿在调用中使用Qt 4 connect()
。使用在编译时检查的Qt 5:
connect(this, &MainWindow::sendImgData,
segsetup, &SegSetupDialog::getImgData, Qt::QueuedConnection);
(当然,如果你把它移到SegSetupDialog构造函数中,请适当地改变它。