Qt小部件调整宽度= 256,而不应该

时间:2011-12-17 18:02:54

标签: qt qt4 qt-designer qtablewidget qtreewidget

表单设置:

包含QSplitter(左)和QTreeWidget(右)的

QTableWidget(图片上突出显示):

QSplitter中这两个小部件的非默认属性:

  • QTreeWidget

    minimumSize / Width = 150

  • QTableWidget

    minimumSize / Width = 300
    sizePolicy / Horizo​​ntal 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错误。

技术信息

  • Ubuntu 10.04(Lucid Lynx)x86_64
  • GCC 4.4.3
  • Qt 4.6.2

2 个答案:

答案 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