2014-10-17 121 views
0

簡而言之,我想要一個新的類來擴展自己創建的自定義小部件,從而可以完全訪問它的UI。Qt擴展我自己的小部件

到目前爲止,我已經嘗試了幾種不同的方法,基於通常如何繼承子類/擴展類,但我在某種程度上由於許多不同的原因失敗了。

此外,只是使用我的小部件作爲我的新班級的成員不會爲這種情況。

有人可以舉例說明我將如何做到這一點嗎?我做了一堆搜索,但我似乎無法找到任何與我正在嘗試做什麼有關的命中 如果一切都失敗了,我會簡單地複製代碼並製作一個實際的新小部件,這在技術上會有爲我節省了很多時間,但這樣做感覺不對。

我的第一反應是想這樣做(Qwe是我的新類,Asd是小部件):

class Qwe : Asd {public: ...} 

而且我還送了小部件的UI公開,但後來我得到了錯誤:

使用取消定義類型的UI ::性Asd

每當我試圖訪問用戶界面的元素。

回答

2

比方說,我們有一個名爲BaseWidget的定製小部件和一個名爲ChildWidget的子小部件。聲明BaseWidget作爲一般,但使其ui部件保護的,而不是私人的,就像這樣:

protected: 
    Ui::BaseWidget *ui; 

聲明ChildWidgetBaseWidget得出一個普通的小部件。確保你在ChildWidget.cpp文件中包含ui_BaseWidget.h,就像你在BaseWidget.cpp(包括這個頭文件本身是由Qt生成的)一樣。

頁眉:

#include "BaseWidget.h" 

class ChildWidget : public BaseWidget { 
    Q_OBJECT 
public: 
    explicit ChildWidget(QString text, QWidget *parent = 0);  
}; 

來源:

#include "ChildWidget.h" 
#include "ui_BaseWidget.h" 

ChildWidget::ChildWidget(QString text, QWidget *parent) : 
    BaseWidget(parent) 
{ 
    ui->label->setText(text); 
} 
+0

謝謝,這解決了我的問題 – Yattabyte 2014-10-17 22:24:04