在Qt中的两个类之间发出信号

时间:2012-04-08 20:08:57

标签: c++ qt

我试图制作一个程序,从一个类中获取信号并激活该信号,我想激活第二类中的一个插槽。

在我的例子中,第一个类是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)));

我无法使类之间的信号/插槽连接起作用。你能帮我个忙吗?

如果您对该代码有任何疑问,请询问。抱歉英语不好,我不是母语为英语的人。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您正在从mainWidget的构造函数发出信号,并且由于仅在从该构造函数返回后才进行连接,因此信号不会到达任何位置。

最简单的解决方法是,在不知道代码的其余部分是什么样的情况下,将在信号/插槽连接完成后将调用移至functionDatabaseOpen()中的main()