QStackedLayout隐式显示添加的小部件
QStackedLayout implicitly shows added widget
考虑到简单的应用
#include <QtWidgets>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QStackedLayout stack;
stack.addWidget(new QLabel("Calls QLabel::show()?"));
return app.exec();
}
with qmake project
TEMPLATE = app
TARGET = main
QT += widgets
CONFIG += c++11
SOURCES += main.cpp
会直观地期望一个没有任何UI的应用程序,因为没有在任何小部件上调用QWidget::show
。然而,将显示添加的标签,这导致假设,QStackedLayout::addWidget
显示这个小部件,它可能与:
如果在调用此函数之前
QStackedLayout
为空,则给定的小部件成为当前小部件。
这应该是这样工作吗?我怎样才能摆脱这种违反直觉的行为呢?
这应该是这样工作吗?
我怀疑QStackedLayout类的作者从来没有考虑过有人在布局中放置顶级小部件的可能性。这似乎是一件奇怪的事情。
关于意图:在不与作者交谈的情况下,我们能做的最好的事情就是查看qstackedlayout.cpp中的代码。我看到QStackedLayout::addWidget()调用QStackedLayout::insertWidget(),它调用QStackedLayout::setCurrentIndex(),它调用控件上的show();这就解释了为什么你的QLabel是可见的。
我如何摆脱这种违反直觉的行为?
通常在Qt程序中,您不会将顶层部件addChild()添加到布局中。相反,您应该创建自己单独的顶层小部件,创建与其关联的布局,然后向布局添加子小部件,如下所示:
QWidget topWidget;
QStackedLayout * stack = new QStackedLayout(&topWidget);
stack->addWidget(new QLabel("Calls QLabel::show()?"));
return app.exec();
相关文章:
- Qt:无法直接为带有子项的小部件添加滚动条
- 在QT中为小部件添加彩色边框的最佳方法是什么
- 将小部件添加到布局后,QStylesheet 不起作用
- C++ Qt如何在滚动区域添加小部件?
- 如何从一个向量中删除最小元素并添加到另一个向量,而第一个变为空?
- 将STL文件添加到QT小部件
- 如何使用Qt中的代码将小部件添加到中央小部件中
- 如何将开关QML添加到QT小部件
- 递归地将 1 添加到 BST 中的所有节点,但具有最小数据的节点除外
- 向 Q 小部件添加滚动条
- 如何将小部件添加到qt工具栏
- C++ 创建小部件数组
- 动态地将自定义 qt 小部件添加到框架中,而无需每次都更改布局
- Qt - 无效使用不完整的类型 'class QScrollBar' - 为文本编辑小部件添加水平滚动条
- 在Qt中向小部件添加滚动条的最快和最佳方法
- 如何将自定义小部件添加为工具按钮的弹出菜单
- 将自定义小部件添加为 QTableWidget HorizontalHeader
- Gtk Notebook小部件添加新选项卡错误
- 在QT c++中为包含布局的小部件添加滚动条
- 向小部件添加标签