gpt4 book ai didi

qt - QListView 当列表为空时显示文本

转载 作者:行者123 更新时间:2023-12-03 03:27:56 30 4
gpt4 key购买 nike

当 QListView 中没有项目时,我想显示一些文本(例如“无项目”)。
我尝试重写QListView的paintEvent方法,但没有任何效果。

最佳答案

下面的代码显示了一种通过重载 View 的 paintEvent 方法来实现此目的的简单方法。文本的绘制可能应该使用样式机制来获取字体和笔/画笔,但我会将其留给敏锐的编辑器。

它使用 Qt 5 及其 C++11 功能,以 Qt 4 或 C++11 之前的方式执行此操作将需要一个带有插槽的 QObject 派生类来连接到旋转框的 valueChanged信号。 ListView 的实现不需要在 Qt 4 和 Qt 5 之间进行更改。

screenshot

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

关于qt - QListView 当列表为空时显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765547/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com