继承QAbstractListModel,结合QListView

news/2024/7/7 19:47:04 标签: qt, 开发语言

这里想要写一个QAbstractListModel的子类,学习一下如何实例化QAbstractListModel。

QAbstractListModel子类化-CSDN博客

QVariant与自定义类型互转之奇巧淫技_qt 类型转 qvariant-CSDN博客

#pragma once

#include <QStyledItemDelegate>
#include <qmetatype.h>

class QListView;
class WItemDelegate1 : public QStyledItemDelegate
{
	Q_OBJECT

public:
	WItemDelegate1(QListView* parent = nullptr);
	~WItemDelegate1();
	void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
	QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
};
#include "WItemDelegate1.h"
#include "qlistview.h"
#include "qpainter.h"
#include "qsqlquerymodel.h"
#include <qdebug.h>
#include "ListModel.h"
WItemDelegate1::WItemDelegate1(QListView* parent)
    : QStyledItemDelegate(parent)
{
}

WItemDelegate1::~WItemDelegate1()
{}
QSize WItemDelegate1::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    return QSize(option.rect.width(), 60);
}
void WItemDelegate1::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    if (index.isValid()) {
        int row = index.row();
        QSqlQueryModel* Model = (QSqlQueryModel*)index.model();
        QVariant data = index.data(Qt::DisplayRole);
        WItemData d = data.value<WItemData>();
        QRect rect = option.rect;
        //qDebug() << rect;
        int wx = 5;
        int wy = 5;
        rect.setX(rect.x() + wx);
        rect.setY(rect.y() + wy);
        rect.setWidth(rect.width() - wx * 2);
        rect.setHeight(rect.height() - wy * 2);
        //qDebug() << rect;
        QString text = QString("rowid:%1,col1:%2,col2:%3").arg(d.rowid).arg(d.col1).arg(d.col2);
        painter->setBrush(QColor(0, 0, 0));
        painter->drawRoundedRect(rect, 5, 5);
        painter->setPen(QColor(255, 255, 255));
        painter->drawText(rect, text, QTextOption(Qt::AlignCenter));
    }
}
#pragma once

#include <QAbstractListModel>
#include <QMetaType>


typedef struct {
	int rowid;
	int col1;
	int col2;
} WItemData;

Q_DECLARE_METATYPE(WItemData)

class ListModel  : public QAbstractListModel
{
	Q_OBJECT

public:
	ListModel(QObject *parent = nullptr);
	~ListModel();

	//当子类化QAbstractListModel时,必须提供rowCount()和data()函数的实现
	virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
	virtual int	rowCount(const QModelIndex& parent = QModelIndex()) const;

private:
	QList<WItemData> m_List;
};
#include "ListModel.h"

ListModel::ListModel(QObject *parent)
	: QAbstractListModel(parent)
{
	for (int i = 0; i < 100000; i++)
	{
		WItemData data;
		data.rowid = i;
		data.col1 = i;
		data.col2 = i;
		m_List << data;
	}
}

ListModel::~ListModel()
{}

QVariant ListModel::data(const QModelIndex& index, int role /*= Qt::DisplayRole*/) const
{
	if (!index.isValid())
	{
		return QVariant();
	}

	if (Qt::DisplayRole == role)
	{
		WItemData data(m_List.at(index.row()));
		QVariant variant;
		variant.setValue<WItemData>(data);
		return variant;
	}

	return QVariant();
}

int ListModel::rowCount(const QModelIndex& parent /*= QModelIndex()*/) const
{
	return m_List.size();
}

    ListModel* listModel = new ListModel;
    listView = new QListView;
    listView->setModel(listModel);
    WItemDelegate1* wItemDelegate = new WItemDelegate1(listView);
    listView->setItemDelegate(wItemDelegate);
    listView->show();


http://www.niftyadmin.cn/n/5535024.html

相关文章

EtherCAT主站IGH-- 7 -- IGH之dict_request.h/c文件解析

EtherCAT主站IGH-- 7 -- IGH之dict_request.h/c文件解析 0 预览一 该文件功能`dict_request.c` 文件功能函数预览二 函数功能介绍1. `ec_dict_request_init`2. `ec_dict_request_read`详细分析三 h文件翻译四 c文件翻译该文档修改记录:总结0 预览 一 该文件功能 该文件定义了…

Java发送post或者get请求时如何信任所有证书

1.使用HttpURLConnection发送请求 private static void trustAllCertificates(HttpURLConnection con) throws NoSuchAlgorithmException, KeyManagementException {((HttpsURLConnection) con).setHostnameVerifier(new HostnameVerifier() {public boolean verify(String ho…

【C/C++ new/delete和malloc/free的异同及原理】

new/delete和malloc/free都是用于在C&#xff08;以及C语言在malloc/free的情况下&#xff09;中动态申请和释放内存的机制&#xff0c;但它们之间存在一些显著的异同点。以下是对这两组函数/运算符的异同点的详细分析&#xff1a; 相同点 目的相同&#xff1a;两者都用于在堆…

quill编辑器使用总结

一、vue-quill-editor 与 quill 若使用版本1.0&#xff0c;这两个组件使用哪个都是一样的&#xff0c;无非代码有点偏差&#xff1b;若需要使用表格功能&#xff0c;必须使用 quill2.0 版本&#xff0c;因为 vue-quill-editor 不支持table功能。 二、webpack版本问题 在使用 q…

xinput1_4.dll丢失怎么办?如何来解决xinput1_4.dll丢失问题

在电脑启动游戏时候经常会出现一些问题导致游戏无法打开运行&#xff0c;其中找不到xinput1_4.dll文件丢失就是常见问题之一&#xff0c;那么当遇到xinput1_4.dll丢失怎么办呢&#xff1f;今天就教大家如何来解决xinput1_4.dll丢失问题。 一、xinput1_4.dll文件详解 XINPUT1_4…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_&#xff1a;将log消息…

LabVIEW新能源汽车电池性能测试系统

新能源汽车的核心部件之一是电池&#xff0c;其性能直接关系到整车的续航里程、安全性和寿命。为了确保电池的性能和可靠性&#xff0c;测试是必不可少的环节。本文介绍了一种基于LabVIEW的新能源汽车电池性能测试系统&#xff0c;通过LabVIEW与数据采集设备的无缝集成&#xf…

FreeRTOS学习 -- 软件定时器

一、软件定时器简介 1、软件定时器概述 软件定时器允许设置一段时间&#xff0c;当设置的时间到达之后就执行指定的功能函数&#xff0c;被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期。 简而言之&#xff0c;当定时器的定时…