繁体   English   中英

如何根据标题长度调整 QDialog 的大小?

[英]How can I adjust the size of a QDialog according to its title length?

我的对话窗口的标题之一被缩短(如“我的对话...”)。 如果对话框稍微宽一些,整个标题就会完全显示出来,这样看起来会更好看。

似乎 Qt 中没有设置可以做到这一点。 我在这里找到了一个用于QMessageBox的 hack: QMessageBox::about 可以将大小调整为标题长度吗? ,但并不普遍。 例如,它还必须考虑 window 标题左侧和右侧的图标大小,以计算一个非常好的最小尺寸,其中标题仍然完全显示。

有没有通用的方法来实现这一点? 是否还有一种简单的方法可以做到这一点? 或者这是过度工程?

不仅这个目标是有问题的(参见vahanco评论),而且很难实现,因为window 标题栏根本不是 Qt 领域:除了能够设置其文本并设法显示或隐藏关闭/最小/最大按钮使用 window 标志,那里几乎没有其他控制。

顺便说一句,设置可以(可能)为整个文本腾出空间的对话框最小宽度的一种非常原始的方法如下:

const QString text = "Very very very very very very very very very very very very very long window title";
setWindowTitle(text);

QFontMetrics metrics(font(), this);
setMinimumWidth( metrics.horizontalAdvance(text));

这不会开箱即用,文本很可能会保持剪切,因为使用的字体应该与标题栏中使用的字体相同(通常不是),我们没有考虑框架宽度、图标宽度、标题栏按钮宽度以及 window 管理器拥有的所有其他内容,Qt 完全不知道。

因此,您可以计算所有这些东西需要多少额外空间,并使用完全任意的额外填充来调整宽度,例如

setMinimumWidth( metrics.horizontalAdvance(text) + 256);

也许一开始就得到你想要的(如果你仍然真的想要的话)。

接受的答案对我不起作用。

以下代码适用于 QT 5.15。 根据您调用 setMinumumWidth() 后的文档,您必须调用 updateGeometry()更新几何文档 设置 minimumWidth 应该更新 sizeHint。 这对我来说并没有发生。 QFontMetrics::horizontalAdvance 也没有返回文本的宽度。 我不得不使用 QFontMetrics::boundingRect({title_string}).width()。 在对话框上调用 resize 是最终让它为我工作的原因。 如果接受的答案对您不起作用,请尝试一下。

  QString message = "Message for the user";
  QInputDialog dialog = QInputDialog(this);
  dialog.setLabelText(message);
  QString longTitle = QString("Super long test title for making sure the widget will show all of the stupid long title.");
  dialog.setWindowTitle(longTitle);
  dialog.setInputMode(QInputDialog::TextInput);
  auto fontMetrics = dialog.fontMetrics();
  auto width = fontMetrics.boundingRect(longTitle).width();
  dialog.resize(width + 200, dialog.rect().height());
  const int ret = dialog.exec();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM