带有枚举参数的QObject::connect()
QObject::connect() with enum parameters
我正在尝试将QObject::connect()
与枚举参数一起使用。我收到这个消息。。。
QObject::connect: Incompatible sender/receiver arguments
Calendar::calendarExceptionThrown(Calendar*,ExceptionType)
--> CalendarDBView::handleCalendarException(Calendar*,Calendar::ExceptionType)
连接代码为:
connect(cal, SIGNAL(calendarExceptionThrown(Calendar*,ExceptionType)),
this, SLOT(handleCalendarException(Calendar*,Calendar::ExceptionType)));
根据我所读到的内容,我认为我需要将其添加到Calendar
:的类定义中
Q_ENUMS(ExceptionType)
我将此添加到main.cpp
:
qRegisterMetaType<Calendar::ExceptionType>("ExceptionType");
我仍然收到警告信息。这个相关的线索并没有解决我的问题。我做错了什么?
我相信,如果您只需在连接的SIGNAL部分将ExceptionType更改为Calendar::ExceptionType,就会解决问题。moc期望SIGNAL和SLOT的字符串都匹配。
您需要与信号和插槽声明以及SIGNAL
和SLOT
宏中的内容保持一致。moc
不是一个完整的C++编译器,它只是一个相对智能的解析器。但最终信号和插槽名称只是字符串。
例如,这个"有效":
#include <QtCore>
class A: public QObject {
Q_OBJECT
public:
enum MyEnum { e0 };
public:
A(QObject *parent=0): QObject(parent) {
connect(this, SIGNAL(fire(A::MyEnum)), this, SLOT(foo(A::MyEnum)));
}
public slots:
void foo(A::MyEnum) {
qDebug() << "In slot A::foo()";
}
signals:
void fire(A::MyEnum);
public:
void test() { emit fire(e0); }
};
如果删除所有MyEnum
的A::
限定符,也会起作用。但如果你留下一些,但去掉其他,它就会失败
因此,如果这些信号/插槽需要在类外可见/可访问,则对所有名称进行限定。
相关文章:
- QT 库 QObject::connect: 无法连接 (null)::done() 到 MainWindow::upd
- QObject::connect 有太多的参数
- 可以在 QObject::connect() C++中连接 QML 对象现有信号?
- connect(QObject*, SIGNAL(signal()), functor) 在 qt5 中未连接
- 将QMETAMETHOD作为参数传递到使用新的Qobject :: Connect语法的函数
- 如何在连接 lambda 时将 Qt::ConnectionType 传递给 QObject::connect
- QT 请求"QObject::connect: No such slot BackEnd::RequestReceived"
- QObject::connect:未找到信号
- QObject::connect not connecting signal to slot
- 如果对QObject::connect()使用lambda函数,则使用gcc编译失败
- 无法连接Qt QObject::connect()函数
- QObject::connect与connect方法之间的区别
- Qt:使用QObject::connect指定多个连接类型
- QObject::connect:没有这样的信号progressbarV::keyReleaseEvent()
- QObject::connect: 无法连接 (null)::mySignal() 到 (null)::mySlot()
- 使用 connect() 和 tr() 而不使用 QObject::
- QObject::connect 周围的函数包装器
- QObject::connect:在 c++ Qt 5.3 中连接 qml 信号时没有这样的信号
- Qt connect() without QObject or slots
- Error with QObject::connect()