listview qt 选中内容_qt – 当列表为空时,QListView显示文本

本文介绍了一种在Qt5中当QListView内容为空时,通过重载paintEvent方法显示自定义文本的方法。示例代码创建了一个ListView,并在模型没有数据时,在中间显示"No Items"提示。此外,还提供了一个简单的例子,展示了如何根据QSpinBox的值动态改变ListView的内容。
摘要由CSDN通过智能技术生成

下面的代码显示了通过重载视图的paintEvent方法来实现它的简单方法.绘画的文本应该使用样式机制来获取字体和笔/画笔,但我会留下一个敏锐的编辑器来抓取它.

它使用Qt 5及其C 11特性,这样做Qt 4或pre-C 11方式需要一个带有插槽的QObject派生类连接到旋转框的valueChanged信号. ListView的实现不需要在Qt 4和Qt 5之间进行更改.

#include

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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值