QComboBox 信号未触发
QComboBox signal not trigged
我已经检查了我的代码好几次了,但我仍然不明白为什么它不起作用。
我使用 QComboBox 连接到 class 中的插槽,如下所示:
this->choixCam = new QComboBox;
this->choixCam->addItem("Camera 1");
this->choixCam->addItem("Camera 2");
this->choixCam->addItem("Camera 3");
this->choixCam->addItem("All cameras");
QObject::connect(this->choixCam, SIGNAL(currentIndexChanged(int)), this, SLOT(this->selectCam(int)));
这部分代码定义的是我的 class MainWindows 的构造函数,在 main 中调用。头文件中的定义如下:
public:
QComboBox* choixCam;
public slots:
void selectCam(int choixCam);
我尝试从另一个信号成功 运行 插槽。
将信号与 QString 一起使用,激活信号(int)或尝试在网上查找示例均无效。 Signals/slots 机制也适用于 QButton 和 QSpinBox。
我运行不知道。一些帮助将不胜感激。
谢谢。
@eyllanesc 的回答应该有效。只需将 SLOT(this->selectCam(int))
更改为 SLOT(selectCam(int))
.
但是为什么QT不一样呢?
让我们看一下连接方法:
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal,const QObject *receiver, const char *method,
Qt::ConnectionType type)
并且在 SIGNAl 和 SLOT 定义处:
#define SLOT(a) "1"#a
#define SIGNAL(a) "2"#a
QT 使用 c 字符串来识别 qobject 的信号和槽。
这些字符串在某种字典中用作所有 qobject、信号和槽的关键字。
试试 std::cout << SIGNAL(some text) << std::endl;
看看 SIGNAL 和 SLOT 的作用。
这就是为什么即使没有 SIGNAL 和 SLOT 也可以调用 connect 的原因:
connect(this->choixCam, "2currentIndexChanged(int)", this, "1selectCam(int)");
现在你知道了
SLOT(this->selectCam(int))
将生成 "1this->selectCam(int)"
作为关键字而不是 "1selectCam(int)"
使用 SIGNAL 和 SLOT 定义是因为大多数 IDE 禁用引号内的 C++ 自动完成,这使得编写正确的函数签名变得困难。
我已经检查了我的代码好几次了,但我仍然不明白为什么它不起作用。 我使用 QComboBox 连接到 class 中的插槽,如下所示:
this->choixCam = new QComboBox;
this->choixCam->addItem("Camera 1");
this->choixCam->addItem("Camera 2");
this->choixCam->addItem("Camera 3");
this->choixCam->addItem("All cameras");
QObject::connect(this->choixCam, SIGNAL(currentIndexChanged(int)), this, SLOT(this->selectCam(int)));
这部分代码定义的是我的 class MainWindows 的构造函数,在 main 中调用。头文件中的定义如下:
public:
QComboBox* choixCam;
public slots:
void selectCam(int choixCam);
我尝试从另一个信号成功 运行 插槽。
将信号与 QString 一起使用,激活信号(int)或尝试在网上查找示例均无效。 Signals/slots 机制也适用于 QButton 和 QSpinBox。
我运行不知道。一些帮助将不胜感激。 谢谢。
@eyllanesc 的回答应该有效。只需将 SLOT(this->selectCam(int))
更改为 SLOT(selectCam(int))
.
但是为什么QT不一样呢? 让我们看一下连接方法:
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal,const QObject *receiver, const char *method,
Qt::ConnectionType type)
并且在 SIGNAl 和 SLOT 定义处:
#define SLOT(a) "1"#a
#define SIGNAL(a) "2"#a
QT 使用 c 字符串来识别 qobject 的信号和槽。
这些字符串在某种字典中用作所有 qobject、信号和槽的关键字。
试试 std::cout << SIGNAL(some text) << std::endl;
看看 SIGNAL 和 SLOT 的作用。
这就是为什么即使没有 SIGNAL 和 SLOT 也可以调用 connect 的原因:
connect(this->choixCam, "2currentIndexChanged(int)", this, "1selectCam(int)");
现在你知道了
SLOT(this->selectCam(int))
将生成 "1this->selectCam(int)"
作为关键字而不是 "1selectCam(int)"
使用 SIGNAL 和 SLOT 定义是因为大多数 IDE 禁用引号内的 C++ 自动完成,这使得编写正确的函数签名变得困难。