2

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

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

我无法使类之间的这种信号/插槽连接正常工作。你能给我任何帮助吗?

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

非常感谢您的帮助。

4

1 回答 1

3

您正在从 的构造函数发出信号mainWidget,并且由于仅在从该构造函数返回后才完成连接,因此信号不会去任何地方。

最简单的解决方法是在信号/插槽连接建立后将调用移至functionDatabaseOpen()in ,不知道其余代码是什么样子的。main()

于 2012-04-09T02:44:02.387 回答