我在Qt中做了一個信號插槽,程序運行沒有錯誤或關於我連接的警告。問題是,當我想使用信號插槽時,它總是返回NULL。信號/插槽與返回值不起作用
Main.cpp的
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Game* game = new Game;
Scrabble mainWindow;
mainWindow.show();
QObject::connect(&mainWindow,SIGNAL(getTurn()),game,SLOT(giveTurn()));
return a.exec();
}
Game.h
class Game: public QObject
{
Q_OBJECT
public:
Game(QObject *parent = 0);
~Game();
private:
int m_turn;
public slots:
int giveTurn();
};
Game.cpp
Game::Game(QObject *parent)
:QObject(parent)
{
m_turn = 1;
}
Game::~Game()
{
}
int Game::giveTurn()
{
return m_turn;
}
Scrabble.h
class Scrabble : public QMainWindow
{
Q_OBJECT
public:
explicit Scrabble(QWidget *parent = 0);
~Scrabble();
private:
Ui::Scrabble *ui;
signals:
int getTurn();
};
當我在Scrabble.cpp中使用int turn = emit getTurn();
時,turn將變爲0而不是1. 有沒有人知道我在做什麼錯?
使用這樣的信號是非常不尋常的,甚至沒有記錄工作(http://stackoverflow.com/questions/11890644/qt-return-value-of-signal-works-why-is-the-例如官方文件 - 說它是不可能的)。如果你需要一個返回值,一個信號不是你應該使用的,你應該調用一個普通函數。 – Mat
您應該將其重命名爲「Signal/Slot with return value does not work」。另請參閱此討論:http://stackoverflow.com/questions/5842124/can-qt-signals-return-a-value正如馬特所說,雖然它*可能*工作,Qt的信號/插槽不打算用於像這和你應該尋找另一種解決方案。你使用哪個Qt版本? –
我使用Qt 5.0.2,我使用信號/插槽來連接模型和視圖。 – breght