如何根据标题长度调整 QDialog 的大小?
How can I adjust the size of a QDialog according to its title length?
我的一个对话框 window 的标题被缩短了(如 "My Dialogt...")。如果对话框稍微宽一点,整个标题就会完整显示出来,这样会更好看。
似乎 Qt 中没有设置可以做到这一点。我在这里找到了 QMessageBox
的 hack:Can QMessageBox::about adjust size to title length?,但它并不通用。例如,它还必须考虑 window 标题左侧和右侧的图标大小,以计算出一个非常好的最小尺寸,仍然可以完整显示标题。
有通用的方法来实现吗?还有一种简单的方法吗?或者这是过度设计?
不仅这个目标值得怀疑(见vahanco评论)而且很难实现,因为window标题栏根本不是Qt领域:除了能够设置其文本并使用 window 标志设法显示或隐藏 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));
这不会开箱即用,而且文本很可能会被剪切,因为使用的字体应该与标题栏中使用的字体相同(通常不是)并且我们没有考虑框架宽度、图标宽度、标题栏按钮宽度,以及 window 管理器拥有且 Qt 完全不知道的所有其他内容。
所以,你可以弄清楚所有这些东西需要多少额外的space,然后用完全任意的额外填充来调整宽度,比如[=13] =]
setMinimumWidth( metrics.horizontalAdvance(text) + 256);
也许一开始就得到你想要的(如果你仍然真的想要)。
我的一个对话框 window 的标题被缩短了(如 "My Dialogt...")。如果对话框稍微宽一点,整个标题就会完整显示出来,这样会更好看。
似乎 Qt 中没有设置可以做到这一点。我在这里找到了 QMessageBox
的 hack:Can QMessageBox::about adjust size to title length?,但它并不通用。例如,它还必须考虑 window 标题左侧和右侧的图标大小,以计算出一个非常好的最小尺寸,仍然可以完整显示标题。
有通用的方法来实现吗?还有一种简单的方法吗?或者这是过度设计?
不仅这个目标值得怀疑(见vahanco评论)而且很难实现,因为window标题栏根本不是Qt领域:除了能够设置其文本并使用 window 标志设法显示或隐藏 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));
这不会开箱即用,而且文本很可能会被剪切,因为使用的字体应该与标题栏中使用的字体相同(通常不是)并且我们没有考虑框架宽度、图标宽度、标题栏按钮宽度,以及 window 管理器拥有且 Qt 完全不知道的所有其他内容。
所以,你可以弄清楚所有这些东西需要多少额外的space,然后用完全任意的额外填充来调整宽度,比如[=13] =]
setMinimumWidth( metrics.horizontalAdvance(text) + 256);
也许一开始就得到你想要的(如果你仍然真的想要)。