表单设置:
包含QSplitter
(左)和QTreeWidget
(右)的 QTableWidget
(图片上突出显示):
QSplitter中这两个小部件的非默认属性:
QTreeWidget
minimumSize / Width = 150
QTableWidget
minimumSize / Width = 300
sizePolicy / Horizontal Stretch = 1
基本上,上面的设置指定了这两个组件的最小宽度,QTableWidget
是在表单调整大小时更改宽度的QVBoxLayout
。
右侧的按钮放在QTreeWidget
中,其大小是固定的。
问题:
虽然调整表单QTableWidget
的宽度从最小150到最大不超过256,但只有QTreeWidget
开始增长,而我希望QTableWidget
的宽度不会增加全部,因为QSplitter
是一个,水平拉伸设置为1。
请注意,这与QHBoxLayout
无关,因为当我将这两个小部件放在QTreeWidget
中时也是如此。
更新
将QTreeWidget
maximumSize / Width设置为150(与minimumSize / Width相同)以避免调整此小部件的大小提供以下内容:
QTableWidget
现在修复为150,但是当调整窗口大小时,两个小部件之间存在空隙。这个差距增长到256-150 = 106,然后QTreeWidget
开始扩大
基本上结果是相似的,但{{1}}现在采用的这个时间区域专门用于这个空隙。
我开始觉得这可能是一个Qt错误。
技术信息
答案 0 :(得分:3)
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);
}
};
答案 1 :(得分:0)
您是否尝试过将sizePolicy / HorizontalPolicy
设为Fixed
?