在QWidget的实例中进行QHBoxLayout可访问

时间:2015-10-26 18:24:27

标签: c++ qt

我想要对QWidget进行Subclass ...

 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()之类的'self'关键字完成,但我认为无法使用this关键字

完成

但更一般......在C ++中使用它的最佳方法是什么,因为我在pyqt中使用了很多

2 个答案:

答案 0 :(得分:2)

任何QWidget都可以通过layout函数提供对布局的访问权限。

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

我不知道为什么要外部修改窗口小部件的布局,但此时您需要了解该实际布局类型。了解布局类型,您可以投射和使用它。

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

答案 1 :(得分:0)

实现一个函数addSubWidget(QWidget * aubWidget),其余代码没问题,并使hLayout变为私有。或者击球,使用带有演员的布局功能,比如@James sugested。

在c ++中,我们建议使用此&gt; hLayout,以确保您不会使用同名的局部变量来对其进行描述。