gpt4 book ai didi

c++ - QStackedLayout 隐式显示添加的小部件

转载 作者:行者123 更新时间:2023-11-27 22:58:10 26 4
gpt4 key购买 nike

考虑简单的应用

#include <QtWidgets>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QStackedLayout stack;
stack.addWidget(new QLabel("Calls QLabel::show()?"));
return app.exec();
}

用qmake项目

TEMPLATE = app
TARGET = main
QT += widgets
CONFIG += c++11
SOURCES += main.cpp

人们会凭直觉期待一个没有任何 UI 的应用程序,因为 QWidget::show 没有在任何小部件上调用。但是,将显示添加的标签,这导致假设 QStackedLayout::addWidget显示此小部件,它可能与:

If the QStackedLayout is empty before this function is called, the given widget becomes the current widget.

这应该是这样工作的吗?我如何摆脱这种违反直觉的行为?这是我发现的唯一一种以这种方式工作的布局。

最佳答案

Is this supposed to work that way?

我怀疑 QStackedLayout 类的作者从未考虑过有人将顶级小部件放入布局中的可能性。想要做这件事似乎很奇怪。

关于意图:不过,在不与作者交谈的情况下,我们最多只能查看 qstackedlayout.cpp 中的代码。我看到 QStackedLayout::addWidget() 调用 QStackedLayout::insertWidget(),QStackedLayout::insertWidget() 调用 QStackedLayout::setCurrentIndex(),后者调用小部件上的 show();这可以解释为什么您的 QLabel 变得可见。

How do I get rid of this counterintuitive behaviour?

通常在 Qt 程序中,您不会将顶级小部件 addChild() 添加到布局中。相反,您将创建自己的独立顶级小部件,创建与其关联的布局,然后将子小部件添加到布局,如下所示:

QWidget topWidget;
QStackedLayout * stack = new QStackedLayout(&topWidget);
stack->addWidget(new QLabel("Calls QLabel::show()?"));
return app.exec();

关于c++ - QStackedLayout 隐式显示添加的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com