【问题标题】:QTreeView: show "empty view" item?QTreeView:显示“空视图”项目?
【发布时间】:2015-06-06 07:03:50
【问题描述】:

如果连接的QTreeView 模型(由QSortFilterProxyModel 设置)没有要显示的元素,我想显示一个项目“此视图中没有元素”。

我怎样才能实现这些东西?

感谢您的小提示。

【问题讨论】:

    标签: qt qt5 qtreeview qstandarditemmodel


    【解决方案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);      
            }
        }
    };
    

    【讨论】:

    • 谢谢,它按预期工作:) 试图通过在模型的第一行添加一个“隐藏”元素来解决这个问题,并通过代理模型检查行数来显示它 - 但是实现的代码很多都没用,而且它没有按我的需要工作:/
    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多