QTreeView: показать пустой элемент представления?

Я хочу показать элемент «В этом представлении нет элементов», если в подключенной модели QTreeView (установленной QSortFilterProxyModel) нет элементов для отображения.

Как я могу реализовать такие вещи?

Спасибо за маленькие подсказки.


person Andreas    schedule 02.05.2014    source источник


Ответы (1)


Одним из решений является переопределение события рисования древовидного представления и рисование пользовательского текста, когда в представлении нет элементов. Вам нужно создать подкласс QTreeView следующим образом:

class TreeView : public QTreeView
{
[..]
protected:
    void paintEvent(QPaintEvent * event)
    {
        if (model() && model()->rowCount() > 0) {
            QTreeView::paintEvent(event);
        } else {
            // If no items draw a text in the center of the viewport.
            QPainter painter(viewport());
            QString text(tr("There are no elements in this view"));
            QRect textRect = painter.fontMetrics().boundingRect(text);
            textRect.moveCenter(viewport()->rect().center());
            painter.drawText(textRect, Qt::AlignCenter, text);      
        }
    }
};
person vahancho    schedule 02.05.2014
comment
Спасибо, это работает так, как ожидалось :) Попытался решить эту проблему, добавив скрытый элемент в первую строку модели и показав его, проверив количество строк с помощью прокси-модели, но это бесполезно много кода для реализации, и это не работает, так как мне это нужно :/ - person Andreas; 02.05.2014