带有返回值的信号/插槽不起作用
Signal/Slot with return value doesn't work
我在Qt中制作了一个信号槽,程序运行时没有出现错误或关于我所做连接的警告。问题是,当我想使用信号槽时,它总是返回NULL。
主要.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;
}
拼字游戏.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。有人知道我做错了什么吗?
您使用的信号和插槽不正确。信号不能返回值。参见Signals&插槽文档页面:
信号由moc自动生成,不得在.cpp文件中实现。它们永远不能有返回类型(即使用void)。
正确使用Qt功能时,不需要从信号中返回值。也许你应该提出另一个问题,描述你想做什么以及为什么你需要这样的联系。你肯定做错了什么。
信号/插槽不能返回任何值。可能的解决方案:
拼字游戏:
signal: void requestTurn();
public slot: receiveTurn(int);
游戏:
public slot: onrequestTurn();
signal: sendTurn(int);
emit
"关键字"目前还没有文档记录,但从Qt的源代码来看,它只是空定义,因此您的代码
int turn = emit getTurn();
将扩展到:
int turn = getTurn();
然而,这不包括在官方文档中,它可能随时更改-所以-不要使用它
现在,请注意,turn
变量不是从插槽获取值,而是从信号获取值。从一个插槽到另一个信号传递返回值是没有意义的(好吧,这在您的示例中可能有意义,但如果我将多个插槽连接到一个信号会怎样?哪个插槽将返回值,如果插槽异步执行会怎样?我们应该等待返回值吗,等等)
您可以使用常规函数调用(只需调用giveTurn()
函数:int turn = giveTurn()
)。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- QT5 C 信号到QML插槽不起作用
- 连接另一个在Qt中不起作用的类的插槽
- Qt 信号和插槽在更新 QTableView 时不起作用
- QML C 信号插槽不起作用
- 从Qt调用C++函数(插槽不起作用)
- 带有返回值的信号/插槽不起作用