我希望在Qt-C ++项目中有以下布局:一个VBoxLayout,其中有两个QTextEdits在彼此之下。最上面的一个应该缩小到最小尺寸:1行文本,如果有一行,如果有更多则更大。底部应占据窗口中的剩余空间。
我现在在mainwindow的构造函数中有以下代码(扩展了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给出的大小,而不是minimalheight。不幸的是,似乎没有一种方法可以在没有继承QTextEdit的情况下调整sizehint。
我已尝试过不同的东西,如上面的代码所示,提出了一个最小的QTextEdit和一个扩展。唯一有效的是设置第一个QTextEdit的最大高度,这是我不想硬编码的东西,因为它中的文本可能比我现在硬编码的某些限制要大。加上硬编码限制并不是很好的编码实践。
由于我想在我的应用程序(QTextEdit,标签,按钮......)中对不同的qwidge使用类似的大小调整,我宁愿不必使用继承,因为这会带来很多额外的类,这些都会改变但是他们父类的一件事。
我在Qt 5.7.0工作。
注意:关于qsizepolicy和Qt中的大小调整似乎有很多问题。如果我错过了这个问题的副本,你可以自由链接并关闭这个。