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

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

本文关键字:QDialog 调整 何根 标题      更新时间:2023-10-16

我的对话框窗口的一个标题被缩短了(如"My Dialogt..."(。如果对话框稍宽,整个标题将完全显示,看起来会更好。

Qt中似乎没有设置来做到这一点。我在这里发现了一个QMessageBox的技巧:QMessageBox::about 可以将大小调整为标题长度吗?,但它不是通用的。例如,它还必须考虑窗口标题左侧和右侧图标的大小,以计算出一个非常好的最小大小,其中标题仍然完整显示。

有没有通用的方法来实现这一点?有没有一种简单的方法可以做到这一点?还是过度设计?

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

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

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));

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

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

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

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

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

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

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();