在 QTableView 中设置 QPlainTextEdit 委托的高度

Posted

技术标签:

【中文标题】在 QTableView 中设置 QPlainTextEdit 委托的高度【英文标题】:Setting the Height of a QPlainTextEdit Delegate in a QTableView 【发布时间】:2011-09-19 12:37:59 【问题描述】:

我正在这里做一个项目,目前我遇到了以下问题。 它是关于一个 QTableView,它有一个名为“Description”的列,该列的单元格包含一个 QPlainTextEditDelegate。每次输入 QPlainTextEdit 时,我都无法设置它的高度。现在它的行为类似于 QLineEdit,直到我将 QTableView 的行(当时我在其中处于活动状态)拖得更大。

我想要做的是在输入 QPlainTextEdit 后更改它的高度。 你有什么建议?我怎样才能继续完成这件事?

提前谢谢大家!

顺便说一句,对不起我的英语不好:/

编辑:

好的,我解决了,但没有 sizeHint,我使用了 updateEditorGeometry :

void updateEditorGeometry( QWidget* editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const;

在这个方法里面,你可以随意设置宽度或高度

editor->setGeometry(option.rect.x(),option.rect.y(),<your_width>,<your_height>);

不过还是谢谢你!

【问题讨论】:

【参考方案1】:

您应该在创建编辑器时重新实现 QAbstractItemDelegate::sizeHint 方法以返回预期的高度。我认为创建编辑器后不需要发出 QAbstractItemDelegate::sizeHintChanged 信号,但文档没有说明任何内容。如果没有它就无法工作,您应该在返回创建的编辑器小部件后发出 sizeHintChanged 以通知视图需要更改行高。

【讨论】:

感谢您的回答我在我的 Delegate 子类中实现了 sizeHint 方法,但它从未被调用过。与此同时,我正在寻找原因,并在 Qt-interest 存档中找到了一条消息。该人声称在他添加后它起作用了:tableView.verticalHeader( )->resizeSections( QHeaderView::Custom ); tableView.horizontalHeader( )->resizeSections( QHeaderView::Custom ); 但这并没有解决问题。然后我发现另一个建议禁用stretchLastSection,但这也不起作用。你提到要发出 sizeHintChanged(),我应该把它准确地放在哪里? 大小提示的调用独立于编辑器的存在 - 如果您的编辑器大于 DisplayRole,您应该在为给定项目创建编辑器后发出 sizeHintChanged(如果大小取决于数据,则在 createEditor 和 setEditorData 中) ,所以 qt 知道它现在应该保留更多空间。奇怪的是你的 sizeHint 没有被调用 - 确保你有完全相同的方法声明 - 有时缺少 const 或某些东西导致方法被视为不同的方法并且(显然)不被视为虚拟覆盖 - 因此它没有被调用。

以上是关于在 QTableView 中设置 QPlainTextEdit 委托的高度的主要内容,如果未能解决你的问题,请参考以下文章

在 QTableView 中设置 QPlainTextEdit 委托的高度

Qt 在 QTableView 中设置自定义小部件

使用 PySide2 在 QTableView 中设置文本样式

如何在 Qt QTableView 中设置 Shift + 单击选择的初始索引?

QTableView - 选择背景颜色

PyQt - 在 QThread 中设置代理模型的模型