我想在 Qt-C++ 项目中具有以下布局:一个 VBoxLayout,其中有两个 QTextEdits 在彼此下方。最上面的应该缩小到最小尺寸:如果有一行,则为 1 行,如果有更多则更大。底部的应该占用窗口中的剩余空间。
我现在在我的主窗口(扩展 QMainWindow)的构造函数中有以下代码:
QWidget *mainpanewidget = new QWidget(this);
QVBoxLayout *mainpane = new QVBoxLayout(mainpanewidget);
this->setCentralWidget(mainpanewidget);
QTextEdit *firsttext = new QTextEdit(this);
firsttext->setText("first text");
QTextEdit *secondtext = new QTextEdit(this);
secondtext->setText("second text");
//first try: use sizepolicies
firsttext->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
secondtext->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
//second try: explicitely set minimum size to something small
firsttext->setMinimumHeight(10);
firsttext->setMinimumWidth(10);
//3th try: stretch factors
mainpane->setStretchFactor(firsttext,0);
mainpane->setStretchFactor(secondtext,1);
//4th try: size policy of surrounding layout
mainpanewidget->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
mainpane->addWidget(firsttext);
mainpane->addWidget(secondtext);
mainpane->update();
使用此代码,第二个 QTextEdit 确实变得比第一个大,但第一个似乎认为它的最小尺寸应该是 192 像素(14 行),这远远高于它真正需要的行数:1。这是大小由 sizehint 给出,而不是最小高度。不幸的是,似乎没有办法在不继承 QTextEdit 的情况下适应 sizehint。
从上面的代码中可以看出,我尝试了不同的方法来提出一个最小的 QTextEdit 和一个扩展的。唯一可行的是设置第一个 QTextEdit 的最大高度,这是我不想硬编码的,因为其中的文本可能大于我现在硬编码的某个限制。加上硬编码限制不是很好的编码实践。
因为我想在我的应用程序(QTextEdit,标签,按钮,...)中对不同的 qwidgets 使用类似的大小,所以我宁愿不必使用继承,因为这会带来很多额外的类,这些类都会改变,但只有一个他们父类的东西。
我在 Qt 5.7.0 中工作。
注意:在 Qt 中似乎有很多关于 qsizepolicy 和调整大小的问题。如果我错过了这个问题的副本,您可以自由链接并关闭这个问题。