QSizePolicy :: Minimum不会最小化qwidget

时间:2016-12-30 16:30:24

标签: c++ qt qsizepolicy

我希望在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中的大小调整似乎有很多问题。如果我错过了这个问题的副本,你可以自由链接并关闭这个。

0 个答案:

没有答案