【问题标题】:resizing row's height in QTreeWidget/QTreeView在 QTreeWidget/QTreeView 中调整行的高度
【发布时间】:2010-04-16 14:14:58
【问题描述】:

我在 QTreeWidget 中调整行高时遇到了一些问题。我将 QStyledItemDelegate 与 QPlainTextEdit 一起使用。在 QPlainTextEdit 中编辑文本期间,我通过以下方式检查更改:

rect = self.blockBoundingRect(self.firstVisibleBlock())

如果文本的高度发生变化,我会调整编辑器的大小,并且 QTreeWidget 中的行也需要调整大小。但我不知道如何通知 TreeWidget 或代表有关更改。我试图用索引初始化编辑器,我可以在将来使用它,但是 Delegate 每次都会创建新的编辑器并且我没有使用信号。我还使用以下函数来捕获调整大小事件,但它没有:

bool QAbstractItemDelegate::editorEvent ( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index )

如何使用 TreeWidget 绑定编辑器的大小变化?

还有一件事,默认情况下,TreeWidget 中的所有项目(单元格)都具有 -1 或某个较大的值作为默认宽度。我需要单元格中的整个文本可见,那么如何仅通过可见范围限制单元格宽度并使其在高度上扩展?我希望它与 MSWord 中的表格具有相同的行为。

提前谢谢你, 塞尔吉

【问题讨论】:

    标签: qt pyqt


    【解决方案1】:

    我相信您必须在不关闭编辑器的情况下通知模型有关数据更改的信息,这应该会强制树视图根据其显示的字段的新内容重新计算其行高。您可以做的是覆盖委托中的 eventFilter 方法并尝试在按键时发出 commitData 信号;像这样:

    bool YourStyledItemDelegate::eventFilter(QObject* object, QEvent* event)
    {
        bool result = QStyledItemDelegate::eventFilter(object, event);
        QWidget* editor = qobject_cast<QWidget*>(object);
        if (editor)
        {
            if (event->type() == QEvent::KeyPress)
            {
                emit commitData(editor); //<- this should force row to recalculate its size
            }
        }
        return result;
    }
    

    希望这能给你一个关于如何继续的想法,regars

    【讨论】:

    • 谢谢,它可以工作,但不是我需要的方式,在承诺光标设置在开头之后,我可以以某种方式修复它,但无论如何更大的问题似乎是为单元格设置固定大小,每个单元格的内容都是自动换行的,并且没有省略号显示
    • 每当您向模型提交数据时,您的委托的 setEditorData 方法都会被调用;它负责为编辑器小部件提供新数据。我想这是解决光标问题的地方。
    • 再次感谢,但我正在努力设置单元格的大小,而这一切都是徒劳的
    猜你喜欢
    • 2012-07-06
    • 2015-03-06
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2012-08-18
    相关资源
    最近更新 更多