我试图制作一个程序,从一个类中获取信号并激活该信号,我想激活第二类中的一个插槽。
在我的例子中,第一个类是mainWindow类,这个类是QMainWindow的子类,在这个类中是我要激活的插槽。
这是mainWindow.cpp:
mainWindow::mainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::mainWindow)
{
ui->setupUi(this);
}
mainWindow::~mainWindow()
{
delete ui;
}
void mainWindow::slotForStatusBarMessage(QString string)
{
statusBar()->showMessage(string);
}
第二个类是mainWidget类,它是QWidget的子类。
这是mainWidget.cpp:
mainWidget::mainWidget(QWidget *parent) :
QWidget(parent)
{
buttonAddNewRecord=new QPushButton("Add new record", this);
layoutButton=new QHBoxLayout();
layoutButton->addWidget(buttonAddNewRecord);
layoutMain=new QVBoxLayout();
layoutMain->addLayout(layoutButton);
functionDatabaseOpen();
setLayout(layoutMain);
}
信号来自functionDatabaseOpen()函数:
if (sqlDatabase.open())
{
emit signalForShowMessageInStatusBar("true");
}
else
{
emit signalForShowMessageInStatusBar("false");
}
我已经对数据库进行了所有设置,但由于篇幅原因我没有复制。
我曾尝试在main.cpp中建立连接,但似乎它起作用了。
QObject::connect(mw, SIGNAL(signalForShowMessageInStatusBar(QString)), w, SLOT(slotForStatusBarMessage(QString)));
我无法使类之间的信号/插槽连接起作用。你能帮我个忙吗?
如果您对该代码有任何疑问,请询问。抱歉英语不好,我不是母语为英语的人。
非常感谢你的帮助。
答案 0 :(得分:3)
您正在从mainWidget
的构造函数发出信号,并且由于仅在从该构造函数返回后才进行连接,因此信号不会到达任何位置。
最简单的解决方法是,在不知道代码的其余部分是什么样的情况下,将在信号/插槽连接完成后将调用移至functionDatabaseOpen()
中的main()
。