选项大小策略和延伸因素如何影响窗口小部件的大小?
下图显示了三个不同排列窗口的预览.对于所有三个窗口(W1-W3),右侧的小部件是QFrame小部件,其水平和垂直大小策略设置为Preferred(这是默认设置).水平伸展因子设置为2.左侧的小部件是一个QListView小部件,其大小策略也设置为Preferred(默认情况下,这将是Expanding),水平伸展因子设置为1.
三个窗口在两个窗口小部件相互布局的方式上有所不同.
详细说明三个不同窗口的设置如下图所示:
我有以下问题:
据记录,与拉伸因子相关的拆分器的行为与布局的行为不同:您不应期望它们看起来相同。
如果按照您的要求实现,W2 和 W3 应该看起来相同。您的 ui 文件有错误。
这是一个不使用 .ui 文件的测试用例:
// https://github.com/KubaO/stackoverflown/tree/master/questions/layout-stretch-triad-37680657
#include <QtWidgets>
struct Window : public QMainWindow {
QWidget central;
QHBoxLayout layout{¢ral};
QListView view;
QFrame frame;
Window(const QString & title) {
setWindowTitle(title);
setCentralWidget(¢ral);
view.resize(300, 300);
view.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
frame.resize(300, 300);
frame.setLineWidth(3);
frame.setFrameStyle(QFrame::Box);
resize(500, 200);
show();
}
};
struct Window1 : Window {
Window1() : Window("W1") {
layout.addWidget(&view, 1);
layout.addWidget(&frame, 2);
}
};
struct Window2 : Window {
QSplitter splitter;
Window2() : Window("W2") {
layout.addWidget(&splitter);
splitter.addWidget(&view);
splitter.addWidget(&frame);
splitter.setStretchFactor(0, 1);
splitter.setStretchFactor(1, 2);
}
~Window2() { frame.setParent(0); view.setParent(0); }
};
struct Window3 : Window {
QSplitter splitter;
QWidget leftWidget;
QVBoxLayout leftLayout{&leftWidget};
Window3() : Window("W3") {
layout.addWidget(&splitter);
splitter.addWidget(&leftWidget);
splitter.addWidget(&frame);
splitter.setStretchFactor(0, 1);
splitter.setStretchFactor(1, 2);
leftLayout.setMargin(0);
leftLayout.addWidget(&view);
}
~Window3() { frame.setParent(0); view.setParent(0); }
};
int main(int argc, char ** argv) {
QApplication app{argc, argv};
Window1 w1;
Window2 w2;
Window3 w3;
w2.move(w1.pos() + QPoint(0, 75));
w3.move(w2.pos() + QPoint(0, 75));
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)