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

标签 qt qt4 qt-designer qtablewidget qtreewidget

表单设置:
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 错误。

    技术信息:
  • Ubuntu 10.04 (Lucid Lynx) x86_64
  • GCC 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);
      }
    };
    

    关于Qt 小部件调整为宽度 = 256,而它不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546777/

    相关文章:

    c++ - Qt.Signals&Slots.Connecting问题

    c++ - 根节点以上内容的 Qt xml 文件问题

    python - 将图形嵌入 GUI(Qtdesigner 和 Pyside)

    c++ - 为 QGraphicsView 小部件设置纯背景颜色

    c++ - Qt 中使用的 C++ 语言有多现代?

    c++ - 逐步将 Delphi 移植到 C++

    c++ - 如何使用 Qt 进行触摸屏校准

    c++ - 在 ImageView Blackberry 10 中动态设置 imageSource

    qt - 在 Qt 中制作自定义菜单栏

    python - 单击事件清除 QLineEdit