调整行大小';QTreeWidget/QTreeView中的s高度

调整行大小';QTreeWidget/QTreeView中的s高度,qt,pyqt,Qt,Pyqt,我在QTreeWidget中调整行高度时遇到一些问题。我将QStyledItemDelegate与QPlainTextEdit一起使用。在QPlainTextEdit中编辑文本期间,我通过以下帮助检查更改: rect = self.blockBoundingRect(self.firstVisibleBlock()) 若文本的高度发生变化,我会调整编辑器的大小,并且需要调整QTreeWidget中的行的大小。但我不知道如何将更改通知TreeWidget或代表。我试图用索引初始化编辑器,我可以在

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

rect = self.blockBoundingRect(self.firstVisibleBlock())
若文本的高度发生变化,我会调整编辑器的大小,并且需要调整QTreeWidget中的行的大小。但我不知道如何将更改通知TreeWidget或代表。我试图用索引初始化编辑器,我可以在将来使用索引,但每次委托都会创建新的编辑器,我无法使用信号。我还使用了以下函数来捕获调整大小事件,但它“没有:

bool QAbstractItemDelegate::editorEvent ( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index )
如何使用TreeWidget绑定编辑器的大小更改

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

提前谢谢大家,,
Serge

我相信您必须在不关闭编辑器的情况下通知模型数据更改,这将迫使treeview根据其显示的字段的新内容重新计算其行高。您可以做的是覆盖代理中的eventFilter方法,并尝试在按键时发出commitData信号;smth是这样的:

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;
}
boolYourStyledItemDelegate::eventFilter(QObject*object,QEvent*event)
{
bool result=QStyledItemDelegate::eventFilter(对象,事件);
QWidget*editor=qobject\u cast(对象);
如果(编辑)
{
如果(事件->类型()==QEvent::按键)
{

发出提交数据(编辑器);//谢谢,它可以工作,但不是我需要的方式,在开始设置光标后,我可以以某种方式修复它,但无论如何,更大的问题似乎是设置单元格的固定大小,即每个单元格的内容都是文字包装的,并且在将数据提交到代理的setEditorData方法get的模型时没有省略调用;它负责向编辑器小部件提供新数据。我想这是解决光标问题的地方。再次感谢,但我正在努力为单元格设置大小,而这一切都是徒劳的