表单设置:QSplitter
(在图像上突出显示)包含 QTreeWidget
(左)和QTableWidget
(对):
QSplitter 中这两个小部件的非默认属性:
QTreeWidget
最小尺寸/宽度 = 150
QTableWidget
最小尺寸/宽度 = 300
sizePolicy/水平拉伸(stretch) = 1
基本上,上面的设置指定了这两个组件的最小宽度,并且
QTableWidget
是在表单调整大小期间会改变其宽度的那个。右侧的按钮放在
QVBoxLayout
它的大小是固定的。问题:
调整表单大小时
QTreeWidget
的宽度从最小 150 到未知 256,然后才 QTableWidget
开始增长,而我预计 QTreeWidget
完全不增加宽度,因为 QTableWidget
是一个,将水平拉伸(stretch)设置为 1。请注意,这与
QSplitter
无关,因为当我将这两个小部件放在 QHBoxLayout
中时也会发生同样的情况反而。更新:
设置
QTreeWidget
maximumSize/Width 为 150(与 minimumSize/Width 相同)以避免调整此小部件的大小,提供以下内容:QTreeWidget
现在固定为 150,但是当调整窗口大小时,两个小部件之间会出现空白。这个差距增长到256-150=106,然后QTableWidget
开始扩大。基本上结果是相似的,但这次是
QTreeWidget
所占用的区域现在致力于这个空白。我开始觉得这可能是一个 Qt 错误。
技术信息:
最佳答案
256 宽度的尺寸提示被硬编码为 QAbstractScrollArea
. (为什么?我不知道。)这是来自 qabstractscrollarea.cpp 的方法:
QSize QAbstractScrollArea::sizeHint() const
{
return QSize(256, 192);
#if 0
Q_D(const QAbstractScrollArea);
int h = qMax(10, fontMetrics().height());
int f = 2 * d->frameWidth;
return QSize((6 * h) + f, (4 * h) + f);
#endif
}
我不确定
0
发生了什么宏......也许有人开始实现非硬编码宽度但没有完成,这是为了测试?无论如何,您可以通过子类化
QTreeView
来解决它。并实现您自己的尺寸提示,例如:class MyTreeView : public QTreeView {
public:
explicit MyTreeView(QWidget *parent = NULL) : QTreeView(parent) { }
QSize sizeHint() const {
return QSize(150, 192);
}
};
关于Qt 小部件调整为宽度 = 256,而它不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546777/