[英]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.