2015-10-26 39 views
0

我想子類一個QWidget的一個實例入店...讓QHBoxLayout,負責在一個QWidget

Widget::Widget(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::ImgWidget) 
{ 
    // Is this the right place or does it need to be outside like: Widget::layout... 
    QHBoxLayout *hLayout = new QHBoxLayout; 
    ... 
    hLayout->addWidget(someWidget); 
    this->setLayout(hLayout); 
} 

...,然後在比如我想添加小部件的佈局像

Widget *widget = new Widget(); 
... 
widget->hLayout->addWidget(someOtherWidget); 

在Python等效將由像self.layout = QHBoxLayout()「自我」關鍵字來完成,但我認爲它不能與this關鍵字

但更普遍的做...什麼爲t他在C++中做到這一點的最佳方式,因爲我用pyqt做了很多工作

+0

是的。糾正一些拼寫btw – tobilocker

回答

2

任何QWidget都可以通過layout函數提供對佈局的訪問。

Widget* widget = new Widget(); 
QLayout* layout = widget->layout(); 

我不知道你爲什麼要在外部修改控件的佈局,但在這一點上,你需要的是實際的佈局類型的知識。瞭解佈局類型後,您可以投射並使用它。

QHBoxLayout* hLayout = qobject_cast<QHBoxLayout>(layout); 
+0

也許有更好的解決方案,是的。我想我已經得到了它。相當於'self.hLayout.addWidget(widget)'是我的子類的成員函數,我想是這樣的:'void widget :: addWidget(QWidget * widget){...}'事情是更多的初學者對任何子類的結構提出質疑 – tobilocker

+0

@tobilocker是的,'self'在C++中是'this'',並且使用'this''需要一個類成員函數。 –

0

實現一個功能addSubWidget(QWidget的* aubWidget),該代碼的其餘部分是確定的,並hLayout私人。或擊球手,使用佈局功能,如@詹姆斯吞噬。

在C++中,這只是推薦的,不是強制性的使用this-> hLayout來確保你沒有用同名的局部變量來標記它。