Qt-can';t将QGraphicsView信号的子类(非继承)连接到插槽
我定义了类MyGraphicsView,QGraphicsView的一个子类。然后,我在MyGraphicsView中添加了一个signal test()。在我的MainWindow类中,我有MyGraphicsView*myView,我的连接方式如下: 连接(myView,信号(test()),此,插槽(zoom()) 但我得到了:Qt-can';t将QGraphicsView信号的子类(非继承)连接到插槽,qt,signals-slots,qgraphicsview,Qt,Signals Slots,Qgraphicsview,我定义了类MyGraphicsView,QGraphicsView的一个子类。然后,我在MyGraphicsView中添加了一个signal test()。在我的MainWindow类中,我有MyGraphicsView*myView,我的连接方式如下: 连接(myView,信号(test()),此,插槽(zoom()) 但我得到了: QObject::connect: No such signal QGraphicsView::test() in ..\Proto_version_2\
QObject::connect: No such signal QGraphicsView::test() in ..\Proto_version_2\mainwindow.cpp:73
为了在类中使用插槽和信号,它必须从QObject或QObject派生类派生,并且您的类必须包含Q_OBJECT宏
class MyClass : public QGraphicsView
{
Q_OBJECT // Without this macro, signals and slots will not work
public:
MyClass(QObject* parent);
};
对象Que宏允许类使用Qt的C++扩展。如文件所述:-元对象编译器MOC是处理Qt的C++扩展的程序。 MOC工具读取C++头文件。如果它找到包含QyObject宏的一个或多个类声明,它就生成包含这些类的元对象代码的C++源文件。除此之外,信号和插槽机制、运行时类型信息和动态属性系统都需要元对象代码
但是请注意,Qt 5提供了一个附加的connect调用,如果缺少Q_对象,该调用将发出警告:-connect(myView, QMainView::test, myClassObj, MyClass::zoom);
在本例中,第2个和第4个参数是指向函数的指针。此外,还执行connect调用的运行时检查。您可以阅读更多信息。为了在类中使用插槽和信号,它必须从QObject或QObject派生类派生,并且您的类必须包含Q_OBJECT宏class MyClass : public QGraphicsView { Q_OBJECT // Without this macro, signals and slots will not work public: MyClass(QObject* parent); };
对象Que宏允许类使用Qt的C++扩展。如文件所述:-元对象编译器MOC是处理Qt的C++扩展的程序。 MOC工具读取C++头文件。如果它找到包含QyObject宏的一个或多个类声明,它就生成包含这些类的元对象代码的C++源文件。除此之外,信号和插槽机制、运行时类型信息和动态属性系统都需要元对象代码
但是请注意,Qt 5提供了一个附加的connect调用,如果缺少Q_对象,该调用将发出警告:-connect(myView, QMainView::test, myClassObj, MyClass::zoom);
在本例中,第2个和第4个参数是指向函数的指针。此外,还执行connect调用的运行时检查。您可以阅读更多信息。我们可以查看您的代码吗?您是否在声明中添加了Q_对象?我们可以查看您的代码吗?您是否在MyGraphicsView
声明中添加了Q_对象?MyGraphicsView
总是需要的,无论您使用旧语法还是新语法。如果您尝试连接到一个没有moc
宏的对象,Qt5Q_对象
甚至不会编译。@KubaOber,哎呀,我的错误。我当时写得很匆忙。我已经更正了答案。connect
始终是需要的,无论您使用的是旧语法还是新语法。如果您尝试连接到一个没有moc
宏的对象,Qt5Q_对象
甚至不会编译。@KubaOber,哎呀,我的错误。我当时写得很匆忙。我已经更正了答案。connect