【qml】QQuickPaintedItem作为代理在ListView中使用

news/2024/5/9 10:09:50/文章来源:https://blog.csdn.net/hitzsf/article/details/127335251

文章目录

  • 1.说明
  • 2.程序截图
  • 3.TextBalloon 类
    • 3.1 TextBalloon.h
    • 3.2 TextBalloon.cpp
    • 3.3 textballoons.qml
    • 3.4 main.cpp

1.说明

QQuickPaintedItem类提供了一种在QML场景图中使用QPainter API的方法。

QQuickPaintedItem本身作为Item,也可以在ListView中作为代理使用。

案例本身是官方的例子,但是使用的方式是用qml的插件方式,先修改成普通的注册类型使用。插件以后再学习。

2.程序截图

程序运行界面如图:
在这里插入图片描述

3.TextBalloon 类

3.1 TextBalloon.h

#ifndef TEXTBALLOON_H
#define TEXTBALLOON_H#include <QQuickPaintedItem>
#include <QQuickItem>
#include <QtQml>class TextBalloon : public QQuickPaintedItem
{Q_OBJECTQ_PROPERTY(bool rightAligned READ isRightAligned WRITE setRightAligned NOTIFY rightAlignedChanged)
public:TextBalloon(QQuickItem *parent = 0);public:virtual void paint(QPainter *painter) override;bool isRightAligned() const;void setRightAligned(bool newRightAligned);const QColor &background() const;void setBackground(const QColor &newBackground);signals:// QQuickPaintedItem interfacevoid rightAlignedChanged();void backgroundChanged();private:bool m_rightAligned;QColor m_background;Q_PROPERTY(QColor background READ background WRITE setBackground NOTIFY backgroundChanged)
};#endif // TEXTBALLOON_H

3.2 TextBalloon.cpp

#include "TextBalloon.h"#include <QBrush>
#include <QPainter>TextBalloon::TextBalloon(QQuickItem *parent):QQuickPaintedItem(parent),m_rightAligned(false),m_background("steelblue")
{
}void TextBalloon::paint(QPainter *painter)
{painter->setBrush(m_background);painter->setPen(Qt::NoPen);painter->setRenderHint(QPainter::Antialiasing);QSizeF itemSize = size();painter->drawRoundedRect(0, 0, itemSize.width(), itemSize.height() - 10, 10, 10);if (m_rightAligned){const QPointF points[3] = {QPointF(itemSize.width() - 10.0, itemSize.height() - 10.0),QPointF(itemSize.width() - 20.0, itemSize.height()),QPointF(itemSize.width() - 30.0, itemSize.height() - 10.0),};painter->drawConvexPolygon(points, 3);}else{const QPointF points[3] = {QPointF(10.0, itemSize.height() - 10.0),QPointF(20.0, itemSize.height()),QPointF(30.0, itemSize.height() - 10.0),};painter->drawConvexPolygon(points, 3);}
}bool TextBalloon::isRightAligned() const
{return m_rightAligned;
}void TextBalloon::setRightAligned(bool newRightAligned)
{if (m_rightAligned == newRightAligned)return;m_rightAligned = newRightAligned;emit rightAlignedChanged();
}const QColor &TextBalloon::background() const
{return m_background;
}void TextBalloon::setBackground(const QColor &newBackground)
{if (m_background == newBackground)return;m_background = newBackground;emit backgroundChanged();
}

3.3 textballoons.qml

// textballoons.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQml.Models 2.15
import TextBalloon 1.0Item {height: 480width: 320// 消息显示栏ListView{id:listViewanchors.left: parent.leftanchors.right: parent.rightanchors.top: parent.topanchors.bottom: row.topspacing:10delegate: TextBalloon{x: rightAligned ? listView.width - width : 0width: msg.widthheight: msg.implicitHeight + 10rightAligned: index%2background: "#1e6eff"Label{padding: 10id: msgtext:messagecolor: "white"width: implicitWidth > listView.width ? listView.width : implicitWidthwrapMode: Label.Wrap}}model: ListModel{id:listModel}} // 消息显示栏 end// 发送栏Row{id:rowheight: 30spacing: 10anchors.left: parent.leftanchors.right: parent.rightanchors.bottom: parent.bottom// 消息输入框Rectangle{width: parent.width-50-parent.spacingheight: parent.heightborder.color: "black"TextEdit{id : edittext: "聊天内容xxxx"anchors.fill: parentverticalAlignment: Text.AlignVCenter}} // 消息输入框 endButton{width: 50height: parent.heighttext: "发送"property real index: 1onClicked: {index *= 10listModel.append({"message":edit.text+index});listView.positionViewAtEnd()}}} // 发送栏 end
}

3.4 main.cpp

#include <QApplication>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include "TextBalloon.h"int main(int argc, char *argv[])
{QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);qmlRegisterType<TextBalloon>("TextBalloon",1,0,"TextBalloon");QQuickView view;view.setSource(QUrl(QStringLiteral("qrc:/painteditem/textballoons.qml")));view.show();return app.exec();
}

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

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

相关文章

机器学习笔记 - sklearn决策树(kaggle 实战 Titanic 入门)

Kaggle - Titanic 前言 这是 Kaggle 上非常典型的一道入门题&#xff0c;可以用很多机器学习或者深度学习甚至是一些“奇淫技巧”的方法来解决。因为我是一个初学者&#xff0c;所以我希望在尽可能提高正确率的情况下&#xff0c;用更简单的方法。如果这也能帮助到你&#xf…

数据库作业一

MySQL数据库 MySQL官方提供了两个不同的版本&#xff1a; 1、社区版 &#xff08;MySQL Commimity Server&#xff09;免费&#xff0c;MySQL不提供任何技术支持&#xff08;本文操作选用社区版&#xff09; 2、商业版&#xff08;MySQL Enterprise Edition&#xff09;收费&a…

[Microsoft] 通过Microsoft Spotlight 中国站云技能挑战获取微软免费考试券

这是一篇关于微软Spotlight 推出学习活动的同时&#xff0c;如何获得免费考试券的方法&#xff0c;如果该文章在未来时间已经失效&#xff0c;那么建议你关注一下这个博客&#xff0c;有Azure China Cloud最新的消息会进行更新通知。 文章目录1. 所需准备注册账号2. 参加 Micro…

二十八、Hive集成HBase分析搜索引擎用户行为数据

我们已经知道,HBase数据库没有类SQL的查询方式,因此在实际的业务中操作和计算数据非常不方便。而Hive支持标准的SQL语法(HiveQL),若将Hive与HBase集成,则可以通过HiveQL直接对HBase的表进行读写操作,让HBase支持JOIN、GROUP等SQL查询语法,完成复杂的数据分析。甚至可以…

【电源设计】13开关电源仿真与应用

0.前言 本章主要是大概了解一下开关电源仿真与应用&#xff0c;开关电源仿真设计全过程&#xff1a;包括需求分析/控制/PWM。因为本人并不是专门做电源的&#xff0c;此部分内容仅作了解&#xff0c;并不专门去学习。 文章目录0.前言1.项目需求2.方案介绍2.1DCDC级&#xff08…

互联网重提内容为王?学Netflix(奈飞)做好内容营销

Netflix 成立于1997年&#xff0c;不久便一跃成为最受瞩目的流媒体服务网站。它为什么能在短短时间内获得如此巨大的成功呢&#xff1f;答案就在于它使用的超凡 内容营销策略 和方法 —— 数据驱动 、优化内容、以流量转化为目标。 内容为王众人皆知&#xff0c;内容营销是品牌…

【计算机毕业设计】java ssm高校计算机网络考试系统(源码+论文)

提供了一些今年最新计算机毕业设计源代码、文档及帮助指导&#xff0c;公众号&#xff1a;一点毕设&#xff0c;领取更多毕设资料。 随着计算机以及网络在教学领域的高速发展&#xff0c;为了加快数字化校园的进程&#xff0c;更好的实现现代化的教育改革&#xff0c;针对于当下…

手动制作满足SARscape要求的_dem数据

手动制作满足SARscape要求的_dem数据问题描述1 下载研究区的原始DEM数据&#xff0c;在envi中镶嵌裁剪&#xff0c;得到.dat格式的数据&#xff0c;然后用envi中的Original ENVI工具把.dat转成_dem1.1 下载研究区的原始DEM数据1.2 将.tif数据转成envi格式的.dat2. 能不能直接将…

WordPress开发中常用代码(必备)

很多人在WordPress开发中常用代码&#xff0c;WordPress 相比其它网站程序&#xff0c;最突出的优势&#xff1a;主题模板多&#xff0c;插件多&#xff0c;相关技术文章多&#xff0c;只要你想到的功能&#xff0c;都可以通过插件或者代码实现。现在分享下WordPress常用代码&a…

组合关系比依赖关系耦合性更强

首先说明&#xff0c;在这里我把“关联”、“组合”、“聚合”关系都统一当做“组合”关系来说的&#xff0c;但实际上聚合&#xff08;has-a&#xff09;是关联的一种&#xff0c;组合&#xff08;cntains-a&#xff09;也是关联的一种。如果想要知道三者之间的区别&#xff0…

实验二.常用网络命令

常用网络命令一、实验目的与要求学习常用网络命令的使用方法熟悉主机的基本网络配置 二、预习与准备网络常用命令及基本用法。主机的基本网络配置信息。 三、 实验内容 1.Ping命令 2.ipconfig命令 3.arp命令&#xff08;地址转换协议&#xff09; 4.traceroute命令 5.route命令…

花咲の姫君(異時層ツキハ) / 花咲(异时层妖刀)

目录基本资料面板值&#xff08;无天冥加成&#xff09;天冥奖励战斗宣言&#xff08;VC&#xff09;被动效果Another Sense技能珠子回到人物索引 基本资料 NS(5★)卡池 (Ver 2.13.50)ミヤビノカミの典録 天冥属性武器防具属性耐性异常耐性NS天火枪护腕风30%10%个性枪、东方、…

目标检测SSD学习笔记

目标检测SSD学习笔记 SSD: Single Shot MultiBox Detector Abstract. 我们提出了一种使用单一深度神经网络来检测图像中的对象的方法。我们的方法&#xff0c;命名为SSD&#xff0c;将边界框的输出空间离散化为一组默认框&#xff0c;每个特征地图位置具有不同的纵横比和比例…

BasicSR入门教程

BasicSR入门教程 1.安装环境 由于安装好的其他环境已经有了pytorch&#xff0c;那么新建环境时直接拷贝该环境就好 //复制环境 conda create --name my-basicsr --clone mmediting克隆项目 git clone https://github.com/XPixelGroup/BasicSR.git安装依赖包 cd BasicSR pi…

MyBatis--缓存

MyBatis的缓存 MyBatis的一级缓存 一级缓存是SqlSession级别的&#xff0c;通过 同一个SqlSession 查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就会从缓存中直接获取&#xff0c;不会从数据库重新访问 import com.bijing.mybatis.mapper.CacheMapper; im…

二手商品交易网站

摘 要 本论文主要论述了如何使用JAVA语言开发一个二手商品交易网站&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述二手商品交易网站的当前背景以及系统开发的目…

大话西游服务端开服架设服务器搭建教程

大话西游服务端开服架设服务器搭建教程 大话西游一款回合制角色扮演手游&#xff0c;游戏内包含人族、仙族、魔族、鬼族四大种族&#xff0c;每个种族各有4个角色可供玩家选择。相信很多玩这款游戏的玩家也有不少想知道自己怎么可以开一个sf&#xff0c;自己当服主&#xff0c…

教学设计题-教学目标

&#xff08;1)知识与技能目标 基础知识与基本技能 了解/理解&#xff08;概念&#xff0c;性质&#xff09; 掌握&#xff08;方法&#xff0c;过程&#xff09; 运用/会&#xff08;----&#xff09;剞劂问题 &#xff08;2&#xff09;过程与方法目标 通过&#xff08;观察…

Linux篇【2】:shell命令初步认识,Linux权限(上)

目录 1、shell命令以及运行原理 2、Linux权限的概念 3、Linux权限管理 3.1、文件访问者的分类(人) 3.2、文件类型和文件权限属性(事物属性) 1、shell命令以及运行原理 Linux严格意义上说的是一个操作系统&#xff0c;我们称之为" 核心(kernel) " &#xff0c;但…

Jenkins配置用户权限

前几篇讲了一下有关Jenkins的一系列的操作&#xff1a; 在linux上搭建jenkins&#xff0c;并进行所需的配置 Jenkins安装插件一直失败&#xff0c;报错SunCertPathBuilderException的解决方案 jenkins配置拉取git远程仓库的代码并进行自动化构建部署 怎么修改Jenkins的默认…