如何在 QTableView 中创建冻结的页脚行

Posted

技术标签:

【中文标题】如何在 QTableView 中创建冻结的页脚行【英文标题】:how to create frozen footer row in QTableView 【发布时间】:2014-02-12 18:06:30 【问题描述】:

我知道有类似的问题,但没有一个有解决方案。 Qt 文档为 QAbstractScrollArea::setViewportMargins() 指定了这一点:

“将滚动区域周围的边距设置为左、上、右和下。这对于具有“锁定”行和列的电子表格等应用程序很有用。边缘空间留空;将小部件放在未使用的区域. 注意这个函数经常被QTreeView和QTableView调用,所以边距必须由QAbstractScrollArea子类实现。此外,如果要在项目视图中使用子类,它们不应调用此函数。 默认情况下,所有边距为零。"

我能够通过调用 setViewportMargins 为冻结行创建空间,但我不知道如何在该空间中放置控件。有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

您应该查看code editor example。

基本上,您只需在视口边距上放置一个小部件。当您调整 QTableView 对象的大小时,您还必须调整小部件的大小。这当然是在您的QTableView 对象的resize event 中完成的。

在示例中是这样完成的:

void CodeEditor::resizeEvent(QResizeEvent *e)

    QPlainTextEdit::resizeEvent(e);

    QRect cr = contentsRect();
    lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));

【讨论】:

谢谢,我需要做的就是调用 setGeometry 更新了代码编辑器示例的链接:doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html

以上是关于如何在 QTableView 中创建冻结的页脚行的主要内容,如果未能解决你的问题,请参考以下文章

使用 QStyledItemDelegate 子类在 QTableView 中创建 PushButtons

表 colspan 跨越所有列,而不考虑列数

如何在c#中创建指针类型类的指针

如何在 Swing 中创建延迟

如何在 Swing 中创建延迟

在 QTableView 中编辑单元格后使用 TAB 键前进时如何避免编辑模式?