在 QTableView 中设置 QPlainTextEdit 委托的高度
我正在这里从事一个项目,目前我遇到了以下问题。 它是关于一个 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(),
不过还是谢谢你!
I'm working here on a project and currently I'm stuck on the following problem.
It is about a QTableView which has a column called "Description", the cells of this column contain a QPlainTextEditDelegate. I'm failing on setting the Height of the QPlainTextEdit everytime it is entered. Right now it behaves like a QLineEdit until I drag the row ( in which I'm active at that time ) of the QTableView larger.
What I want to do is to change the Height of the QPlainTextEdit once I entered it.
What are your suggestions? How can I proceed to get this thing done?
Thank you all in advance!
BTW Sorry for my poor english :/
edit:
Ok I solved it, but without sizeHint, I used updateEditorGeometry :
void updateEditorGeometry( QWidget* editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
And inside this Method, you can set the width or height like you want
editor->setGeometry(option.rect.x(),option.rect.y(),<your_width>,<your_height>);
But thank you anyway!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该在创建编辑器时重新实现 QAbstractItemDelegate::sizeHint 方法以返回预期高度。我认为创建编辑器后没有必要发出 QAbstractItemDelegate::sizeHintChanged 信号,但文档没有说明任何内容。如果没有它就无法工作,您应该在返回创建的编辑器小部件后发出 sizeHintChanged 以通知视图需要更改行高。
You should reimplement QAbstractItemDelegate::sizeHint method to return expected height when you create your editor. I don't think that it's necesary to emit QAbstractItemDelegate::sizeHintChanged signal after creating editor, but documentation doesn't say anything. If it doesn't work without it, you should emit sizeHintChanged after returning created editor widget to notify view of need to change row height.
我面临着完全相同的问题,尽管 QTableView 中有一个自定义委托,其中有一个 QPlainTextEdit 作为编辑器。最初,编辑器的大小不会超出其表格单元格的大小。
什么对我不起作用:
updateEditorGeometry()
:仅在初始show()
时调用sizeHint()
:从未被调用,无论是在子类还是基类中,无论任何update()
、updateGeometry()
调用或信号在看似无穷无尽的时间收集有关一些未记录的 QPlainTextEdit/QTextDocument 的小块信息之后“功能”和 Qt 怪癖我通过连接到 QPlainTextEdit-> 得到了我想要的东西document()->documentLayout() 的 documentSizeChanged(QSizeF) 信号。
以下是根据需要扩展编辑器同时将其限制为父 QTableView 视口 (
m_pTableView
) 的要点。希望这对任何人都有意义。示例代码不能按原样编译,但应该提供足够的提示来开始使用。
h 编辑器 + 委托
cpp 编辑器 + 委托
I was facing the exact same issue, though with a custom delegate inside a QTableView which has a QPlainTextEdit as editor. Initailly, the editor would not grow beyond the size of its table cell.
What did not work for me:
updateEditorGeometry()
: was only called on initialshow()
sizeHint()
: wasn't called ever, neither in subclass or baseclass, regardless anyupdate()
,updateGeometry()
calls or signalsAfter seemingly endless hours of collecting small chunks of info about some undocumented QPlainTextEdit/QTextDocument 'features' and Qt quirks I got what I want by connecting to QPlainTextEdit->document()->documentLayout()'s documentSizeChanged(QSizeF) signal.
Below are the essentials to expand the editor as desired while limiting it to the parent QTableView's viewport (
m_pTableView
).Hope this makes sense to anyone. Example code is not compilable as is but should give enough hints to get started.
h editor + delegate
cpp editor + delegate