изменение высоты строки в QTreeWidget / QTreeView - PullRequest
2 голосов
/ 16 апреля 2010

У меня есть некоторые проблемы с изменением размера строки в 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.

Заранее спасибо, Serge

1 Ответ

1 голос
/ 19 апреля 2010

Я полагаю, что вам придется уведомлять модель об изменении данных без закрытия редактора, это должно заставить древовидное представление пересчитать высоту строки в соответствии с новым содержимым отображаемого поля. Что вы можете сделать, это переопределить метод 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;
}

надеюсь, что это даст вам представление о том, как действовать дальше,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...