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中这两个小部件的非默认属性:

  • QTreeWidget

    最小尺寸/宽度=150

  • QTableWidget

    最小尺寸/宽度=300
    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

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

您是否尝试过将
sizePolicy/HorizontalPolicy
设置为
Fixed

以及这些小部件的
QSizePolicy::Policy
?如果为
QTableWidget
设置
QSizePolicy::expansing
,会发生什么情况?
QSizePolicy
是这两个widget的默认值,即展开。即使我将
QTreeWidget
的水平策略设置为最小值,结果也是一样的。请尝试
QTreeWidget
QSizePolicy::Maximum
。而
QSizePolicy::为
QTableWidget
扩展
最小值实际上并不是“widget应该具有最小大小”,请阅读此文档:不,将
QTreeWidget
的水平大小策略设置为
最大值会得到相同的结果。是的,将sizePolicy更改为不同的值并没有解决此问题。但Dave Mateer提供了问题的根本原因。