在Qt中,当小部件的内容增长时(例如通过在其布局中添加更多小部件),我希望窗口相应增长。这甚至在官方教程中记录为window extension。
在我特定的代码片段中,我可以看到此扩展名不会发生。相反,窗口保持其原始大小,内容被粉碎。
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
class TestDialog : public QWidget
{
Q_OBJECT
public:
TestDialog() {
layout = new QVBoxLayout;
QLabel* lbl = new QLabel("This is a long label that word wraps");
lbl->setWordWrap(true); // This line causes the problem
layout->addWidget(lbl);
QPushButton* btn = new QPushButton("Push me");
layout->addWidget(btn);
setLayout(layout);
connect(btn, SIGNAL(clicked()), this, SLOT(addLabel()));
}
private slots:
void addLabel() {
layout->addWidget(new QLabel("hey!"));
}
private:
QVBoxLayout* layout;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
TestDialog* dialog = new TestDialog;
dialog->show();
return app.exec();
}
初始状态:
点击按钮后的预期行为:
点击按钮后的实际行为:
当删除对setWordWrap
的调用时,问题就消失了,但当然这不是我想要的,因为我需要保持自动换行为。
此外,当我用包含描述的Qlabel
替换包QCommandLinkButton
时,我也会看到相同的行为(描述文本也有自动换行行为)。
如何将窗口扩展行为与自动换行行为结合起来?
答案 0 :(得分:0)
您可以通过更改标签小部件的大小政策来实现此目的。
lbl->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
但我不确定问题的原因是什么。