【问题标题】:Setting QTableView width depends on model columns设置 QTableView 宽度取决于模型列
【发布时间】:2013-03-30 03:04:23
【问题描述】:

我的数据有一个自定义的 QAbstractTableModel,该模型当前包含固定数量的列 (12)。我还有一个自定义 QTableView 来显示这个模型。当我将此小部件添加到我的对话框时,它总是像这样

我使用标准布局(QFormLayout、QVBoxLayout)将小部件添加到对话框中,并且我没有为我的小部件指定 minimumSize(),希望布局引擎能够为我计算出最好的布局。

那么,如何设置模型类/QTableview 类,使其自动展开以显示所有列?或者如何使我的 tableView 的 minimumSize 取决于表格列的宽度?

(我不想硬编码窗口的像素值,因为每当列更改时,我都必须再次手动调整值)

【问题讨论】:

    标签: qt layout


    【解决方案1】:

    如您所见,滚动条位于表格内部,而不是外部。 QTableView 扩展 QAbstractScrollArea,当内容不适合视口时创建它们。视口的最小尺寸由QSize QAbstractScrollArea::maximumViewportSize () const 方法控制(顺便说一句,它不是虚拟的)。

    我认为,最好的方法是将QWidget::saveGeometry()(是QMainMindow?)和QTableView::horizontalHeader()->saveState() 保存在您的小部件的析构函数中QSettings,然后在构造函数中重新调用它们。

    【讨论】:

    • 这是一个QDialog,但我在QMainWindow上还有一个类似的情况
    • 两种方式都使用 saveGeometry/restoreGeometry。
    • 感谢您的建议。 AFAIK,在 Win 平台上使用 QSetting 会向注册表写入一些内容,这不是我希望我的应用程序做的事情。那么,有没有替代方法可以达到同样的效果呢?另外,由于对话框是固定的,我不认为保存小部件的几何形状真的有助于计算小部件的正确宽度。
    • 1.您可以将 QSettings 与 IniFormat 参数一起使用。 2.确实,对于固定大小的对话框,这不是一个选项,这就是为什么我建议您允许用户更改大小。替代方法是计算水平标题宽度并手动设置对话框的宽度。
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多