2015-10-26 149 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来确保你没有用同名的局部变量来标记它。