QListView 在列表为空时显示文本
Posted
技术标签:
【中文标题】QListView 在列表为空时显示文本【英文标题】:QListView show text when list is empty 【发布时间】:2013-12-24 18:51:57 【问题描述】:当 QListView 中没有项目时,我想显示一些文本(如“无项目”)。 我试图重写QListView的paintEvent方法,但是没有任何效果。
【问题讨论】:
未来:你需要展示你的代码。您是否尝试过并不重要 - 我们需要查看您的代码来帮助您,否则我们必须从头开始编写它,您的尝试对我们帮助您毫无用处。对于像您这样的每一个问题,您都可以回答一大堆恰当的问题,快速查看代码即可发现问题所在。 【参考方案1】:下面的代码通过重载视图的paintEvent
方法显示了一个简单的方法。文本的绘制可能应该使用样式机制来获取字体和钢笔/画笔,但我会留给敏锐的编辑器来获取。
它使用 Qt 5 和它的 C++11 特性,以 Qt 4 或 C++11 之前的方式执行它需要一个带有插槽的 QObject 派生类来连接到微调框的valueChanged
信号。 ListView
的实现不需要在 Qt 4 和 Qt 5 之间改变。
#include <QtWidgets>
class ListView : public QListView
void paintEvent(QPaintEvent *e)
QListView::paintEvent(e);
if (model() && model()->rowCount(rootIndex()) > 0) return;
// The view is empty.
QPainter p(this->viewport());
p.drawText(rect(), Qt::AlignCenter, "No Items");
public:
ListView(QWidget* parent = 0) : QListView(parent)
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
QWidget window;
QFormLayout layout(&window);
ListView view;
QSpinBox spin;
QStringListModel model;
layout.addRow(&view);
layout.addRow("Item Count", &spin);
QObject::connect(&spin, (void (QSpinBox::*)(int))&QSpinBox::valueChanged,
[&](int value)
QStringList list;
for (int i = 0; i < value; ++i) list << QString("Item %1").arg(i);
model.setStringList(list);
);
view.setModel(&model);
window.show();
return a.exec();
【讨论】:
太棒了!谢谢!【参考方案2】:如果您使用 QListView,您可能有一个包含要显示的数据的自定义模型。当您的模型为空时,这可能是返回“No items”的最佳位置。
【讨论】:
这混淆了演示和事物的业务方面。这样的模型需要是真正的视图模型,充当代理模型。以上是关于QListView 在列表为空时显示文本的主要内容,如果未能解决你的问题,请参考以下文章