QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List(一)——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net)

QListView自定义Item_qlistview 自定义item-CSDN博客

结合我写的上一篇文章:

QTableView与QSqlQueryModel的简单使用-CSDN博客

这次尝试让QListView与QSqlQueryModel结合使用。

但经过尝试,我觉得它们不适合放在一起使用,

因为感觉不是很好用。

QSqlQueryModel的基类是QAbstractTableModel

所以其实QSqlQueryModel更适合与QTableView结合起来使用。

QListView实际上是只有一列的QTableView。

下面是实践的源码:

#pragma once#include <QStyledItemDelegate>
#include <qmetatype.h>class QListView;
class WItemDelegate  : public QStyledItemDelegate
{Q_OBJECTpublic:WItemDelegate(QListView *parent = nullptr);~WItemDelegate();void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
};
#include "WItemDelegate.h"
#include "qlistview.h"
#include "qpainter.h"
#include "qsqlquerymodel.h"
#include <qdebug.h>
WItemDelegate::WItemDelegate(QListView*parent): QStyledItemDelegate(parent)
{}WItemDelegate::~WItemDelegate()
{}
QSize WItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
{return QSize(option.rect.width(), 60);
}
void WItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{if (index.isValid()) {int row=index.row();QSqlQueryModel* Model = (QSqlQueryModel*)index.model();QVariant rowid = index.data(Qt::DisplayRole);QVariant col1 = Model->index(row, 1).data(Qt::DisplayRole);QVariant col2 = Model->index(row, 2).data(Qt::DisplayRole);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(rowid.toInt()).arg(col1.toInt()).arg(col2.toInt());painter->setBrush(QColor(0, 0, 0));painter->drawRoundedRect(rect, 5, 5);painter->setPen(QColor(255, 255, 255));painter->drawText(rect, text,QTextOption(Qt::AlignCenter));}
}
#include "SqlQueryModel.h"
#include "qfiledialog.h"
#include "qsqldatabase.h"
#include "qsqlerror.h"
#include "qsqlrecord.h"
#include "qmessagebox.h"
#include "qapplication.h"
#include "qboxlayout.h"
#include "WItemDelegate.h"
#include "Config/config.h"
SqlQueryModel::SqlQueryModel(QWidget *parent): QMainWindow(parent)
{QString aFile = QString::fromLocal8Bit("E:/桌面/3.db");if (aFile.isEmpty())return;//打开数据库DB = QSqlDatabase::addDatabase("QSQLITE"); //添加 SQL LITE数据库驱动DB.setDatabaseName(aFile); //设置数据库名称if (!DB.open())   //打开数据库{QMessageBox::warning(this, "错误", "打开数据库失败",QMessageBox::Ok, QMessageBox::NoButton);return;}qryModel = new QSqlQueryModel(this);qryModel->setQuery("select rowid,col1,col2 from test;");if (qryModel->lastError().isValid()){QMessageBox::critical(this, "错误", "数据表查询错误,错误信息\n" + qryModel->lastError().text(),QMessageBox::Ok, QMessageBox::NoButton);return;}listView = new QListView;listView->setModel(qryModel);WItemDelegate* wItemDelegate = new WItemDelegate(listView);listView->setItemDelegate(wItemDelegate);listView->show();
}

  在获取数据的时候,有点别扭:

  index是第row行第0列的索引

  根据index得到row和model

  然后得到第row行第1列和第2列的索引

        int row=index.row();QSqlQueryModel* Model = (QSqlQueryModel*)index.model();QVariant rowid = index.data(Qt::DisplayRole);QVariant col1 = Model->index(row, 1).data(Qt::DisplayRole);QVariant col2 = Model->index(row, 2).data(Qt::DisplayRole);

 效果图:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 目录 AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 一、简单介绍 二、Transformer 三、Transformer架构 四、编码器 1、自注意…

vscode使用ssh连接远程服务器

开工啦 vscode连接远程服务器&#xff08;傻瓜式教学&#xff09; 正常根据上面文章的步骤就可以连接了 报错可以尝试的文章&#xff1a; VScode通过remote ssh连接虚拟机 & 报错过程试图写入的管道不存在&#xff08;已解决&#xff09; vscode remote ssh linux[血泪…

从硬件角度看Linux的内存管理

1. 分页机制 分段机制的地址映射颗粒度太大&#xff0c;以整个进程地址空间为单位的分配方式导致内存利用率不高。 分页机制把这个分配机制的单位继续细化为固定大小的页(Page)&#xff0c;进程的虚拟地址空间也按照页来分割&#xff0c;这样常用的数据和代码就可以以页为单位…

代码随想录算法训练营第二天|【数组】209.长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3] 输出&#…

创建React项目

使用 create-react-app快速搭建开发环境 create-react-app 是一个快速创建React开发环境的工具&#xff0c;底层由Webpack构建&#xff0c;封装了配置细节&#xff0c;开箱即用。 安装npx npx是一个由Node.js官方提供的用于快速执行npm包中的可执行文件的工具&#xff0c;np…

Spring 泛型依赖注入

Spring 泛型依赖注入&#xff0c;是利用泛型的优点对代码时行精简&#xff0c;将可重复使用的代码全部放到一个类之中&#xff0c;方便以后的维护和修改&#xff0c;同时在不增加代码的情况下增加代码的复用性。 示例代码&#xff1a; 创建实体类 Product package test.spri…

Windows安装Visual Studio Code(VS Code) (配图超详细!)

一、下载 官方网站&#xff1a;https://code.visualstudio.com/download 二、安装 1、安装之前先在目的安装路径中新建文件夹存放待会要安装的程序&#xff08;因为在安装过程中选择安装路径时无法现场新建文件夹&#xff09;。 2、在下载目录中找到安装包并双击运行&#xf…

大模型在运维领域中的应用

大模型在运维领域中的应用日益广泛&#xff0c;其强大的数据处理、自动化和智能化能力为运维工作带来了显著的效率和质量提升。以下是大模型在运维领域中的具体应用及其优势的详细说明&#xff1a; 一、大模型在运维领域的应用 故障检测与诊断 自动化检测&#xff1a;大模型通…

Linux - Shell 以及 权限问题

目录 Shell的运行原理 Linux权限问题 Linux权限的概念 如何实现用户账号之间的切换 如何仅提升当前指令的权限 如何将普通用户添加到信任列表 Linux权限管理 文件访问者的分类&#xff08;人&#xff09; 文件类型和访问权限&#xff08;事物属性&#xff09; 文件权限值的表…

Keycloak SSO 如何验证已添加的 SPN 是否生效

使用 Kerberos Ticket 验证&#xff1a; 在客户端计算机上&#xff0c;运行以下命令以获取 Kerberos Ticket&#xff1a; klist检查是否存在与 HTTP/yourdomain.com 相关的票证。如果存在&#xff0c;说明 SPN 已生效。 测试应用程序&#xff1a; 使用具有 HTTP/yourdomain.com…

H5实现第三方分享功能,(WhatsApp,Facebook,Messenger,Instagram,Telegram,Zalo,Twitter/X)

1. H5实现第三方分享功能 1. WhatsApp 分享 https://api.whatsapp.com/send/?phone&app_absent0&text${codeUrl}2. Facebook 分享 https://www.facebook.com/sharer/sharer.php?u${codeUrl}3. Messenger 分享 https://www.messenger.com/?${codeUrl}4. Instagra…

深入 Laravel 的错误处理与异常处理机制

引言 Laravel 是一个优雅而强大的 PHP Web 应用框架&#xff0c;它提供了一系列工具来帮助开发者处理应用中的错误和异常。了解 Laravel 的错误处理和异常处理机制对于构建健壮和用户友好的应用程序至关重要。本文将深入探讨 Laravel 如何实现错误和异常处理&#xff0c;并提供…

bond网络配置文件中master、slave-type

在bond网络配置文件中&#xff0c;"master"和"slave-type"是用于设置bond接口的关键词。 "master"关键词用于指定一个网络接口作为bond接口的主接口。例如&#xff0c;在配置文件中设置"master bond0"表示将接口"bond0"设置…

c++单例模式的一种写法

首言 在以前的文章中&#xff0c;我写了一种单例模式。不过那种写法会比较麻烦&#xff0c;要加好几行代码。如今看到了大佬写的新的单例模式&#xff0c;我进行了改进&#xff0c;比较好玩&#xff0c;现在记录下来。 大佬的单例模式 #include <stdexcept>template &…

RFID电子锁物流货运锁控解决方案

一、物流货运行业现状与痛点 货物安全问题&#xff1a;货物在运输过程中存在被盗、损坏的风险&#xff0c;尤其在长途运输和多式联运中。 运输效率低下&#xff1a;传统的锁控方式依赖人工检查&#xff0c;效率低下&#xff0c;且容易出错。 管理成本高昂&#xff1a;物理钥…

普通人如何利用GPT赚钱之如何利用GPT撰写广告文案

如何利用GPT撰写广告文案:从构思到发布的详细指南 在广告文案的世界里,创意和表达是制胜的法宝。而如今,人工智能正为这一领域带来革命性的变化。利用GPT撰写广告文案,不仅高效,而且趣味十足。接下来,我将为你详细介绍如何从构思到发布,巧妙运用GPT打造一篇引人入胜的广…

RouteLLM:高效LLM路由框架,可以动态选择优化成本与响应质量的平衡

该论文提出了一个新的框架&#xff0c;用于在强模型和弱模型之间进行查询路由选择。通过学习用户偏好数据&#xff0c;预测强模型获胜的概率&#xff0c;并根据成本阈值来决定使用哪种模型处理查询 。该研究主要应用于大规模语言模型&#xff08;LLMs&#xff09;的实际部署中&…

ip地址多长时间自动更换一次

IP地址自动更换的时间不是固定的&#xff0c;它取决于多个因素。 首先&#xff0c;如果日常使用的WiFi或有线网络的IP地址是动态的。这意味着&#xff0c;例如&#xff0c;当路由器的默认设置是7天或14天自动重启一次时&#xff0c;IP地址就会改变。此外&#xff0c;公共场所的…

详细分析Spring Boot 数据源配置的基本知识(附配置)

目录 前言1. 基本知识2. 模版3. 实战经验前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新)1. 基本知识 包括数据源的概念、连接池的作用、多数据源的实现与管理、Druid 连接池…

NLP入门——前馈词袋分类模型的搭建、训练与预测

模型的搭建 线性层 >>> import torch >>> from torch import nn >>> class DBG(nn.Module): ... def forward(self,x): ... print(x.size()) ... return x ... >>> tmod nn.Sequential(nn.Linear(3,4),DB…