Qt小部件的大小调整为宽度=256,但它不应';T
表单设置:Qt小部件的大小调整为宽度=256,但它不应';T,qt,qt4,qt-designer,qtablewidget,qtreewidget,Qt,Qt4,Qt Designer,Qtablewidget,Qtreewidget,表单设置: QSplitter(在图像上突出显示),其中包含QTreeWidget(左)和QTableWidget(右): QSplitter中这两个小部件的非默认属性: QTreeWidget 最小尺寸/宽度=150 QTableWidget 最小尺寸/宽度=300 sizePolicy/水平拉伸=1 基本上,上面的设置指定了这两个组件的最小宽度,QTableWidget是在表单调整大小期间更改其宽度的设置。 右侧的按钮放置在QVBoxLayout中,其大小是固定的 问题: 调整表单大小
QSplitter
(在图像上突出显示),其中包含QTreeWidget
(左)和QTableWidget
(右):
QSplitter中这两个小部件的非默认属性:
最小尺寸/宽度=150QTreeWidget
最小尺寸/宽度=300QTableWidget
sizePolicy/水平拉伸=1
QTableWidget
是在表单调整大小期间更改其宽度的设置。右侧的按钮放置在
QVBoxLayout
中,其大小是固定的
问题:
调整表单大小时,QTreeWidget
的宽度从最小150到未知的256,只有到那时,QTableWidget
才开始增长,而我希望QTreeWidget
的宽度根本不会增长,因为QTableWidget
是水平拉伸设置为1的
请注意,这与QSplitter
无关,因为当我将这两个小部件放在QHBoxLayout
中时也会发生同样的情况
更新: 将
QTreeWidget
maximumSize/Width设置为150(与minimumSize/Width相同),以避免调整此小部件的大小,会产生以下结果:
QTreeWidget
现在固定为150,但是当窗口调整大小时,两个小部件之间有一个空白。这个差距扩大到256-150=106,然后QTableWidget
开始扩大。基本上,结果是相似的,但是
QTreeWidget
现在使用的这个时间区域是专用于这个空白的
我开始觉得这可能是一个Qt错误
技术信息:
- Ubuntu 10.04(Lucid Lynx)x86_64
- 通用条款4.4.3
- Qt 4.6.2
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);
}
};
您是否尝试过将
sizePolicy/HorizontalPolicy
设置为Fixed
?以及这些小部件的QSizePolicy::Policy
?如果为QTableWidget
设置QSizePolicy::expansing
,会发生什么情况?QSizePolicy
是这两个widget的默认值,即展开。即使我将QTreeWidget
的水平策略设置为最小值,结果也是一样的。请尝试QTreeWidget
的QSizePolicy::Maximum
。而QSizePolicy::为QTableWidget
扩展最小值实际上并不是“widget应该具有最小大小”,请阅读此文档:不,将QTreeWidget
的水平大小策略设置为最大值会得到相同的结果。是的,将sizePolicy更改为不同的值并没有解决此问题。但Dave Mateer提供了问题的根本原因。