QTreeView:show";“空视图”;项目?

QTreeView:show";“空视图”;项目?,qt,qt5,qtreeview,qstandarditemmodel,Qt,Qt5,Qtreeview,Qstandarditemmodel,如果连接的QTreeView模型(由QSortFilterProxyModel设置)没有要显示的元素,我想显示“此视图中没有元素”项 我如何实施这些事情 感谢小提示。解决方案之一是覆盖树视图的绘制事件,并在视图中没有项目时绘制自定义文本。您需要按以下方式对QTreeView进行子分类: class TreeView : public QTreeView { [..] protected: void paintEvent(QPaintEvent * event) {

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

我如何实施这些事情


感谢小提示。

解决方案之一是覆盖树视图的绘制事件,并在视图中没有项目时绘制自定义文本。您需要按以下方式对
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);      
        }
    }
};

解决方案之一是覆盖树视图的绘制事件,并在视图中没有项目时绘制自定义文本。您需要按以下方式对
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);      
        }
    }
};

谢谢,它按预期工作:)已尝试通过在模型的第一行中添加一个“隐藏”元素来解决此问题,并通过代理模型检查行数来显示它-但这是无用的代码实现,并且它没有按我的需要工作:/谢,它按预期工作:)已尝试通过添加一个“隐藏”元素来解决此问题元素,并通过检查代理模型的行数来显示它-但这是一堆无用的代码来实现,而且它没有按照我需要的那样工作:/