QT程序設計:擴展Qt控件方法

擴展Qt控件:

       Qt自帶控件,一般無法滿足一些自定義的操作。例如QGraphicsView,原生的無法響應鼠標滾輪事件實線縮放,同樣也無法通過鼠標右鍵拖拽。相應的可以通過鼠標滾輪響應滾動條滾動。此處可以通過擴展原生的QGraphicsView控件實現上述功能,並屏蔽掉鼠標滾輪操作滾動條滾動。類似的控件還有,QListView,實現點擊元素,可以發出信號響應對應的槽。

擴展方法:

  • 步驟一:需要編寫自己的控件類繼承自Qt原生的控件類,例如:
class MyGraphicsView :public QGraphicsView
{    
    Q_OBJECT
public:    
    explicit MyGraphicsView(QWidget* parent = 0);    
    virtual ~MyGraphicsView();
protected:    
    virtual void mousePressEvent(QMouseEvent* event);    
    virtual void mouseMoveEvent(QMouseEvent* event);    
    virtual void mouseReleaseEvent(QMouseEvent* event);   
    virtual void wheelEvent(QWheelEvent* event);
}

      並重寫其中的方法,實現自己需要的功能。還可以對其進行擴展,實現自己需要的功能。

  • 步驟二:打開mainwindow.ui佈局文件,選中你需要進行擴展的控件,在其上點擊右鍵:

      再點擊“提升爲”按鈕:

       例如:此處我需要擴展QTextEdit控件,我需要將我寫好的類名添加到“提升的類名稱”一欄,相應的類的頭文件會根據類名,自動添加到“頭文件”一欄。所以需要注意,類的頭文件名需要和類名保持一致,儘量使用Qt提供的類自動創建文件的方式創建。

       最後如上:勾選添加的類,並點擊“提升”按鈕。相應的控件會提升爲自定義類型:

 

先前使用過比較錯誤方法:

       Qt中佈局文件對應的類,會在重新構建時重新生成,但在每次的運行過程中,不會對其進行改變(可能和Qt的編譯方式有關)因此,可以在mainwindow.cpp文件中找到ui_mainwindow.h的程序入口:

可以在MainWindow的構造函數中添加:

ui->graphicsView = new MyGraphicsView;

然後在ui_mainwindow.h中找到一句:

graphicsView = new QGraphicsView(centralWidget);

並將其註釋掉。並保持在每次重新構建後,來到ui_mainwindow.h文件中將其註釋掉。同樣可以達到重寫原生控件的目的。

其原理是,C++類繼承中的向下轉型,父類的指針可以指向子類的對象。並調用重寫掉的父類的方法。這個語法的別名是:動態綁定。

但是比較遺憾的是,無法使用,自己擴展出來的有別於父類的新的方法。這是因爲,父類的指針雖然可以指向子類的對象,但是無法調用,在子類中擴展出來的新的方法。這個語法的別名叫做:靜態聯編。

所以以上方法,雖然可以解決部分問題,但總的來說不是編輯Qt工程擴展控件應該使用的方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章