我想在容器QWidget中插入一个QWidget(通过它的布局),但是避免将插入的窗口小部件嵌入到容器窗口小部件中。
这背后有充分的理由,插入的小部件是一个绑定到文档的工具箱,当文档成为活动文档时,此工具箱将被发送到浮动小部件。
这可能吗?
答案 0 :(得分:1)
我想在容器QWidget中插入一个QWidget(通过它 布局),但避免将插入的窗口小部件嵌套到容器中 窗口小部件。
这背后有充分的理由,插入的小部件是一个工具箱 绑定到文档,此工具箱被发送到浮动停靠小部件 当文档成为活动文档时。
这可能吗?
这个简单的答案是否 - 无法避免小部件成为父级。但坚持下去。首先,为什么答案是否定的。那么我们怎样才能做你想做的事。
设置窗口小部件的布局会执行隐式父窗口设置。 为布局设置窗口小部件会执行隐式父窗口设置。
QVBoxLayout* layout = new QVBoxLayout; // no parent yet
this->setLayout(layout); // it does layout->setParent(this);
QWidget* widget = new MyWidget; // no parent yet
layout->addWidget( widget ); // it does widget->setParent(this);
如果layout是另一个小部件上的布局管理器,则setLayout() 将重新定义布局并使其成为布局管理器 窗口小部件。
使用QLayout重新定位有点复杂,因为addWidget会调用addItem:
void QLayout :: addItem(QLayoutItem * item)
在子类中实现以添加项目。如何添加是具体的 到每个子类。
通常不会在应用程序代码中调用此函数。添加一个 widget到布局,使用addWidget()函数;添加一个孩子 布局,使用相关QLayout提供的addLayout()函数 子类。
注意:项目的所有权转移到布局中,而且它是 布局有责任删除它。
另请参阅addWidget(),QBoxLayout :: addLayout()和 QGridLayout :: addLayout()。
void QLayout :: addWidget(QWidget * w)
以特定于布局的方式将小部件w添加到此布局。这个 函数使用addItem()。
但我们仍然可以对此类请求采取措施:
这背后有充分的理由,插入的小部件是一个工具箱 绑定到文档,此工具箱被发送到浮动停靠小部件 当文档成为活动文档时。
这可能吗?
但这当然是可能的。比如,通过调用QWidget::setParent来说,这是我们需要将父级移动到新布局时的常见做法。