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

C++ 如何根据QDialog的标题长度调整其大小?,c++,qt,dialog,resize,C++,Qt,Dialog,Resize,我的一个对话框窗口的标题被缩短(如“我的对话框…”)。如果对话框稍微宽一点,整个标题就会完全显示出来,看起来会更好 似乎Qt中没有设置来实现这一点。我在这里找到了一个针对QMessageBox的黑客,但它不是通用的。例如,它还必须考虑窗口标题左侧和右侧图标的大小,以计算出一个真正好的最小大小,其中标题仍然完整显示 有没有一个通用的方法来实现这一点?有没有一个简单的方法可以做到这一点?或者这是过度工程化了?不仅这一目标值得怀疑(见评论),而且很难实现,因为窗口标题栏根本不是Qt区域。:除了能够设置

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

似乎Qt中没有设置来实现这一点。我在这里找到了一个针对
QMessageBox
的黑客,但它不是通用的。例如,它还必须考虑窗口标题左侧和右侧图标的大小,以计算出一个真正好的最小大小,其中标题仍然完整显示


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

不仅这一目标值得怀疑(见评论),而且很难实现,因为窗口标题栏根本不是Qt区域。:除了能够设置其文本并使用窗口标志来管理显示或隐藏close/min/max按钮外,几乎没有其他控制

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

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

如果你还真的想要的话,也许会得到你想要的。

@rafaelgonzalez是的,这是我提到的一个不一般的问题。在我看来,根据标题字符串的长度调整对话框的大小是一个糟糕GUI设计的例子,除非有具体的原因。@vahancho为什么?(我不想说你错了。我只是想知道你的理由。)@BenjaminBihler,因为我设想了以下场景:假设你有一个窗口,在它的标题栏上显示你加载的文件的完整路径。现在,您打开一个具有相当长的完整路径的文件-您的窗口会自动扩展,可能会一直扩展到屏幕外。下次打开另一个文件时,窗口会收缩等等。你认为它怎么样?我没有,因为我想自己控制窗口大小。这就是为什么Qt自动剪切标题字符串,而不提供扩展窗口的API。