簡體   English   中英

Qt無法將QGraphicsView信號的子類(未繼承)連接到SLOT

[英]Qt can't connect a subclass of QGraphicsView signal (not inherited) to SLOT

我定義了類MyGraphicsView,它是QGraphicsView的子類。 然后,我在MyGraphicsView中添加了一個信號test()。 在我的MainWindow類中,我具有MyGraphicsView * myView,並且像這樣連接:

connect(myView,SIGNAL(test()),this,SLOT(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);
};

Q_OBJECT宏允許類使用QT的C ++擴展。 如文檔所述:-

元對象編譯器moc是處理Qt的C ++擴展的程序。 moc工具讀取C ++頭文件。 如果找到一個或多個包含Q_OBJECT宏的類聲明,它將生成一個C ++源文件,其中包含這些類的元對象代碼。 除其他外,信號和時隙機制,運行時類型信息和動態屬性系統還需要元對象代碼。

但是請注意,Qt 5提供了附加的連接調用,如果缺少Q_OBJECT,該調用將發出警告:-

connect(myView, QMainView::test, myClassObj, MyClass::zoom);

在這種情況下,第2個和第4個參數是指向函數的指針。 此外,還將執行connect調用的運行時檢查。 您可以在此處了解更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM