继承QAbstractListModel,结合QListView

这里想要写一个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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/765262.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React+TS 从零开始教程(4):useEffect

上一节传送门&#xff1a;ReactTS 从零开始教程&#xff08;3&#xff09;&#xff1a;useState 源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 上一节&#xff0c;我们已经学会了React的第一个Hook&#xff1a;useState。 这一节&#xff0c;我们要学习的是另一…

聊聊etsy平台,一个年入百万的项目

聊聊etsy平台&#xff0c;一个年入百万的项目 什么是etsy,这是怎样一个平台&#xff0c;怎样盈利的&#xff1f;相信现在大家满脑子都是这些疑问。 这个平台也是无意间一个学员提到的&#xff0c;据说他朋友靠这个平台年赚好几百万。苦于门槛太高&#xff0c;他也做不了。今天…

乐鑫Wi-Fi单火线开关方案,传统开关智能升级,启明云端乐鑫一级代理商

随着智能家居技术的飞速发展&#xff0c;我们的日常生活正在变得越来越便捷。今天&#xff0c;我们要探讨的是一种创新的智能家居方案——Wi-Fi单火线智能开关。 传统的机械单火线开关虽然简单可靠&#xff0c;但在现代智能家居系统中显得力不从心。它们无法远程控制&#xff…

python实现简单的三维建模学习记录

课程来源与蓝桥云课Python 实现三维建模工具_Python - 蓝桥云课和500 Lines or LessA 3D Modeller 说明 个人估计这是一个值得花一个礼拜左右时间去琢磨的一个小项目。上述网址中的代码直接拿来不一定能跑&#xff0c;需要后期自己去修改甚至在上面继续优化&#xff0c;会在其…

Java 汉诺塔问题 详细分析

汉诺塔 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小…

华为手机怎么打印文件?

关于华为手机打印的问题&#xff0c;如果您有打印机&#xff0c;并且已经成功和华为手机相连&#xff0c;在解决上就要容易很多。 具体操作如下&#xff1a; 选择文件 文件来源&#xff1a;华为手机上的文件可以来自多个应用&#xff0c;如图库、备忘录、文件管理等&#xf…

Python入门 2024/7/2 While

目录 while循环的基础应用 循环输出十次&#xff1a;键盘敲烂&#xff0c;月入过万 计算1~100的和 用while循环练习猜数字 while循环的嵌套应用 打印九九乘法表 输出不换行的功能 while循环的基础应用 格式&#xff1a; while 条件&#xff1a; 条件满足时&#xff0c…

leetcode刷题:vector刷题

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;leetcode刷题 1.只出现一次的数字 这道题很简单&#xff0c;我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0&#xff0c;任何数与0异或还是它本身) class Solut…

Nuxt3 的生命周期和钩子函数(八)

title: Nuxt3 的生命周期和钩子函数&#xff08;八&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt3框架中的一些重要生命周期钩子&#xff0c;如prepare:types用于自定义TypeScript配置和类型声明&#xff0c;…

ubuntu apt命令 出现红色弹框 Daemons using outdated libraries

1. 弹框没截图&#xff0c;是因为ubuntu22.04一个新特性导致的&#xff0c;由 needrestart 命令触发&#xff0c;默认情况是交互性质的&#xff0c;也就是会中断在这里需要手动要处理提示。 2. 修改/etc/needrestart/needrestart.conf 文件&#xff0c;将 #$nrconf{restart} …

解决obsidian加粗字体显示不突出的问题

加粗字体显示不突出的原因&#xff1a;默认字体的加粗版本本来就不突出 解决方法&#xff1a;改成显示突出的类型Microsoft YaHei UI 【效果】 修改前&#xff1a;修改后&#xff1a; 其他方法&#xff1a; 修改css&#xff08;很麻烦&#xff0c;改半天也不一定奏效&#…

mac上使用finder时候,显示隐藏的文件或者文件夹

默认在finder中是不显示隐藏的文件和文件夹的&#xff0c;但是想创建.gitignore文件&#xff0c;并向里面写入内容&#xff0c;即便是打开xcode也是不显示这几个隐藏文件的&#xff0c;那有什么办法呢&#xff1f; 使用快捷键&#xff1a; 使用finder打开包含隐藏文件的文件夹…

CleanMyMac残留项可以删除吗 mac清理卸载残留文件怎么清理 如何清除MacBook上残留的软件垃圾

如果您不知道Mac电脑如何删除文件&#xff0c;不知道如何删除残留文件&#xff0c;不用担心&#xff0c;本篇文章为大家介绍删除普通文件和删除应用卸载后残留文件的方法。 苹果电脑怎么删除文件&#xff1f; 对于一般的文件&#xff0c;在Mac上将其删除掉不是一件很难的事&a…

【Python】字典练习

python期考练习 目录 1. 首都名​编辑 2. 摩斯电码 3. 登录 4. 学生的姓名和年龄​编辑 5. 电商 6. 学生基本信息 7. 字母数 1. 首都名 初始字典 (可复制) : d{"China":"Beijing","America":"Washington","Norway":…

信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用

PDF文档公众号回复关键字:20240702 2020 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 1.在内存储器中每个存储单元都被赋予一个唯一的序号&#xff0c;称为&#xff08; &#xff0…

pandas数据分析(4)

修改DataFrame数据的最简单的方法是通过loc和iloc属性为某些元素赋值。 首先构造一组数据 通过标签或位置设置值 也可以一次修改多个值&#xff1a; 通过布尔索引设置数据 将所有来自China&#xff0c;或者年龄20以下的人名字设置为匿名&#xff1a; 通过替换值设置数据 如果…

粤港联动,北斗高质量国际化发展的重要机遇

今年是香港回归27周年&#xff0c;也是《粤港澳大湾区发展规划纲要》公布5周年&#xff0c;5年来各项政策、平台不断为粤港联动增添新动能。“十四五”时期的粤港澳大湾区&#xff0c;被国家赋予了更重大的使命&#xff0c;国家“十四五”《规划纲要》提出&#xff0c;以京津冀…

EEPROM内部原理

A2, A1, A0是EEPROM的地址引脚&#xff0c;用于设置设备地址。它们的作用如下&#xff1a; 设备寻址&#xff1a; 这三个引脚允许在I2C总线上唯一地标识EEPROM芯片。通过不同的连接方式&#xff08;接高、接低或悬空&#xff09;&#xff0c;可以为同一类型的EEPROM芯片设置不同…

[PyTorch]:加速Pytorch 模型训练的几种方法(几行代码),最快提升八倍(附实验记录)

本篇文章转自&#xff1a;Some Techniques To Make Your PyTorch Models Train (Much) Faster 本篇博文概述了在不影响 PyTorch 模型准确性的情况下提高其训练性能的技术。为此&#xff0c;将 PyTorch 模型包装在 LightningModule 中&#xff0c;并使用 Trainer 类来实现各种训…

Ubuntu开通5005端口 记录

Ubuntu版本&#xff1a;20.04 使用systemctl status firewalld查看防火墙状态&#xff0c;报错Unit firewalld.service could not be found 报错的原因是没有安装firewall&#xff0c;安装命令为sudo apt install firewalld&#xff0c;然后进行安装 安装完成后输入systemctl…