我在QTreeWidget中调整行高的问题。我将QStyledItemDelegate与QPlainTextEdit一起使用。在QPlainTextEdit中编辑文本期间,我在以下帮助下检查更改:
rect = self.blockBoundingRect(self.firstVisibleBlock())
如果文本的高度发生变化,我会调整编辑器大小并在QTreeWidget中需要行调整大小。但我不知道如何通知TreeWidget或代表有关更改。我尝试使用索引初始化编辑器,我可以在将来使用,但Delegate每次都创建新的编辑器,但我没有使用信号。我还使用了以下函数来捕获resize事件,但它没有:
bool QAbstractItemDelegate::editorEvent ( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index )
如何使用TreeWidget绑定编辑器的大小更改?
还有一件事,默认情况下,TreeWidget中的所有项目(单元格)都有-1或一些大值作为默认宽度。我需要单元格中的整个文本是可见的,那么我如何才能仅通过可见范围限制单元格宽度并使其在高度上扩展?我希望它的行为与MSWord中的表格相同。
提前谢谢你, 哔叽
答案 0 :(得分: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;
}
希望这会让你了解如何继续,重新开始