c++ - 如何根据 QDialog 的标题长度调整其大小?

标签 c++ qt dialog resize

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

Qt 中似乎没有设置可以做到这一点。我在这里找到了 QMessageBox 的 hack:Can QMessageBox::about adjust size to title length? ,但并不通用。例如,它还必须考虑窗口标题左侧和右侧图标的大小,以计算出一个非常好的最小尺寸,同时标题仍然完全显示。

有通用的方法可以实现这一点吗?还有一种简单的方法吗?或者这是过度设计?

最佳答案

这个目标不仅值得怀疑(参见 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));

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

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

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

也许会得到你一开始想要的东西(如果你仍然真的想要它)。

关于c++ - 如何根据 QDialog 的标题长度调整其大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115463/

相关文章:

c++ - 为类重载 `unsigned` 说明符

c++ - 用于指令的 If 语句

android - 使用 QT 创建 Android 库

c++ - QtCreator : `clang: invalid deployment target for -stdlib=libc++ (requires OS X 10.7 or later)`

android - 从另一个类调用 mainActivity 中的函数

visual-studio-2010 - 如何在 Visual Studio 2010 中打开对话框编辑器

c++ - 我如何只接受大写字母作为用户输入?

c++ - QLCDNumber 数字不能居中

android - Google 帐户选择器未显示

c++ - 数据结构对齐:char数组和std::string数组为什么不同