我刚开始着手一个新的C++/Qt项目。它将是一个基于MDI的IDE,带有像文件树、对象浏览器、编译器输出等的停靠小部件。但目前有一件事情困扰着我:我无法弄清如何以编程方式使QDockWidget
变小。例如,这个片段创建了我的底部停靠窗口“构建信息”:
m_compilerOutput = new QTextEdit;
m_compilerOutput->setReadOnly(true);
dock = new QDockWidget(tr("Build Information"), this);
dock->setWidget(m_compilerOutput);
addDockWidget(Qt::BottomDockWidgetArea, dock);
启动程序后,界面如下图所示(请注意开发早期的阶段):
但是,我希望它看起来像这样:
然而,我似乎无法做到这一点。Qt中QDockWidget参考文献上说:“自定义大小提示、最小和最大尺寸以及尺寸策略应在子窗口小部件中实现。QDockWidget将尊重它们,并调整其自身的约束,以包括框架和标题。不应在QDockWidget本身上设置大小限制,因为它们会随着它是否停靠而改变。”
现在,这表明解决问题的一种方法是对
QTextEdit
进行子类化,并覆盖sizeHint()
方法。然而,我宁愿不为此目的创建子类,也没有尝试过这个解决方案是否可行。我已经尝试了调用
dock->resize(m_compilerOutput->width(), m_compilerOutput->minimumHeight())
,并使用m_compilerOutput->setSizePolicy()
中的每个选项……到目前为止还没有影响大小的效果。正如我所说,我希望能够用几行简单的代码来解决问题,而不是创建一个子类来改变sizeHint()
。感谢任何建议。
QTimer::singleShot
的调用替换为qApp->processEvents()
,两者的效果是一样的。虽然这是一种不良的 hack 手段,但这是我找到的唯一一种在 Qt 中调整停靠窗口小部件大小的方式。 - McLeary