Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt-can';t将QGraphicsView信号的子类(非继承)连接到插槽_Qt_Signals Slots_Qgraphicsview - Fatal编程技术网

Qt-can';t将QGraphicsView信号的子类(非继承)连接到插槽

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\

我定义了类MyGraphicsView,QGraphicsView的一个子类。然后,我在MyGraphicsView中添加了一个signal test()。在我的MainWindow类中,我有MyGraphicsView*myView,我的连接方式如下:

连接(myView,信号(test()),此,插槽(zoom())

但我得到了:

    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调用的运行时检查。您可以阅读更多信息。

我们可以查看您的代码吗?您是否在
MyGraphicsView
声明中添加了Q_对象?我们可以查看您的代码吗?您是否在
MyGraphicsView
声明中添加了Q_对象?
moc
总是需要的,无论您使用旧语法还是新语法。如果您尝试连接到一个没有
Q_对象
宏的对象,Qt5
connect
甚至不会编译。@KubaOber,哎呀,我的错误。我当时写得很匆忙。我已经更正了答案。
moc
始终是需要的,无论您使用的是旧语法还是新语法。如果您尝试连接到一个没有
Q_对象
宏的对象,Qt5
connect
甚至不会编译。@KubaOber,哎呀,我的错误。我当时写得很匆忙。我已经更正了答案。