【问题标题】:Emit signal between two classes in QtQt中两个类之间的发射信号
【发布时间】:2012-04-08 20:08:56
【问题描述】:

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

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

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

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

非常感谢您的帮助。

【问题讨论】:

  • 编译器给出什么错误?你在哪里实例化这两个类?
  • 如果代码编译成功,请注意stdout或调试输出——如果Qt需要调用一个信号并且找不到连接的槽,它会打印一些东西。
  • @alexisdm 这是以下输出:Starting /home/kudic/untitled136-build-desktop/untitled136... /home/kudic/untitled136-build-desktop/untitled136 exited with code 0
  • 我在 main.cpp 中实例化了两个类,我也在 main.cpp 中调用 QObject::connect
  • QObject::connect 返回布尔值,尝试通过检查其返回值来检查连接是否成功

标签: c++ qt


【解决方案1】:

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

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

【讨论】:

  • 我认为可以肯定地说从构造函数中发出信号是没有意义的,因为你永远无法及时与它建立连接。接得好。 +1
  • @alexisdm 谢谢我不知道发射不能在构造函数中使用,这就是为什么发射不起作用
  • @depecheSoul 如果它解决了你的问题,你应该接受这个答案
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多