【发布时间】:2014-09-27 20:10:31
【问题描述】:
我做了一个简单的 Qt 项目来解决从另一个类调用 Ui 的问题。
文件:
主窗口.h |主窗口.cpp |客户端.h |客户端.cpp | main.cpp
问题:
将 client.cpp 中的信号连接到 mainwindow.cpp 中的插槽效果很好。
但是当我添加了一个
ui->statusBar->showMessage("message");
在插槽中,它不起作用。注意:当我在 mainwindow.cpp 中制作信号和插槽时,它可以工作,但是从信号和 connect() 调用 mainwindow.cpp 中的插槽client.cpp 中的 不起作用。
代码:(精简为基本内容)
mainwindow.h
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
signals:
public slots:
void doSomething();
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
void MainWindow::doSomething()
{
QMessageBox::information(0, "test", "BINGO!!");
ui->statusBar->showMessage("testing");
}
client.h
class client : public QObject
{
Q_OBJECT
public:
explicit client(QObject *parent = 0);
void call();
signals:
void connected();
public slots:
};
client.cpp
client::client(QObject *parent) :
QObject(parent)
{
MainWindow main;
connect(this, SIGNAL(connected()), &main, SLOT(doSomething()));
call();
}
void client::call()
{
emit connected();
}
已添加:
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
谢谢。
【问题讨论】:
-
请发布您的 main.cpp,谢谢。
-
好的,已编辑帖子
-
那么...您在哪里创建和使用客户端对象?看起来客户端上的代码从未运行过。
-
我有另一个大项目这样做,但我做了一个小项目来解决这个问题,客户端的代码运行,消息框也运行,但用户界面没有。所以这就是问题所在。
-
好的。所以 MainWindow 上的 doSomething 插槽肯定被调用了——你看到消息框了吗?问题是以下行似乎没有被执行,并且您在状态栏中没有看到任何变化?