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

标签 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)));

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

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

非常感谢您的帮助。

最佳答案

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

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

关于c++ - 在 Qt 中的两个类之间发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066094/

相关文章:

qt - 向 QTreeView 列添加填充

java - Quickfix 对 fpml 的支持

c++ - C中的MPI和多维数组分配

python - 声子后端能力太窄

c++ - 如何检查行是否在 SQLite 中被插入或替换?

Visual Studio 2012 中的 Qt, "error C1083: Cannot open include file: ' stddef.h' : No such file or directory"

c++ - QPieSlice的Qt坐标

c++ - 如何初始化非静态的 const 成员

c++ - 拥有与标准 header 同名的自己的 header 是否是未定义的行为?

c++ - 查找正在运行的进程EXE存放在什么目录