qt开发-14_QListwidget 仿qq好友列表制作

QListWidget 继承 QListView。QListWidget 类提供了一个基于项的列表小部件。QListWidg
et 是一个便捷的类,它提供了一个类似于 QListView(下一小节将讲到)提供的列表视图,但
是提供了一个用于添加和删除项目的基于项目的经典接口。QListWidget 使用内部模型来管理列
表中的每个 QListWidgetItem。

我们今天来做一个 仿qq好友列表的界面:

首先创建好项目打开,ui 界面,添加好资源文件,然后打开 ui 界面。添加  pushbutton lineEdit label listwidget 。 构建好布局:

主界面 400x600

按钮 40x40  lineedit 高度40 l abel 高度40 粗体 大小 14 

按钮样式表:

QPushButton{border-image:url(:/icons/search.png)}

lineedit 样式表:

 

QLineEdit{background:transparent; border:none}

界面就设计好了。接下来我们只需要在 Listwidget 里面添加好友信息就可以了。

但是双击 listwidget 我们只能添加文字信息,不能添加其他的图片。所以我们就要自己创建 项 类来显示好友信息。

添加新类

选择 widget 名字自己取就好了。

创建完了之后我们就会跳转到这个类的 ui 界面,我们要在 这个 ui 类里面设计好好友头像和名字信息、在线状态的显示。

r然后添加 两个 label 作为头像和在线状态,并把他们放到同一个 控件 widget 里面:

再添加一个 label 作为用户名。构成水平布局。再加两个弹簧。

然后给 item 添加图片。

在 item.cpp 中

    ui->setupUi(this);
    QImage image1(":/icons/icon1.jpg"); // 选中图片
    //设置图片 并且使其适应 label 大小。
    ui->icon->setPixmap(QPixmap::fromImage(image1.scaled(ui->icon->width(), ui->icon->height())));
    QImage image2(":/icons/phone.png"); // 选中图片
    //设置图片 并且使其适应 label 大小。
    ui->phone->setPixmap(QPixmap::fromImage(image2.scaled(ui->phone->width(), ui->phone->height())));
   // 设置名字。
    ui->name->setText("一只猫");

改 widget.cpp 看看效果

改一下函数让他变得通用:

item.h

#ifndef ITEM_H
#define ITEM_H

#include <QWidget>

namespace Ui {
class item;
}

class item : public QWidget
{
    Q_OBJECT

public:
    explicit item(QString icon,bool flag, QString name, QWidget *parent = nullptr);
    ~item();

private:
    Ui::item *ui;
};

#endif // ITEM_H

item.cpp

#include "item.h"
#include "ui_item.h"

item::item(QString icon,bool flag, QString name, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::item)
{
    ui->setupUi(this);
    QImage image1(icon); // 选中图片
    //设置图片 并且使其适应 label 大小。
    ui->icon->setPixmap(QPixmap::fromImage(image1.scaled(ui->icon->width(), ui->icon->height())));

    QImage image2(":/icons/phone.png"); // 选中图片
    //设置图片 并且使其适应 label 大小。
    ui->phone->setPixmap(QPixmap::fromImage(image2.scaled(ui->phone->width(), ui->phone->height())));
    ui->phone->setVisible(flag);

    // 设置名字。
    ui->name->setText(name);
}

item::~item()
{
    delete ui;
}

同时 widget.cpp 调用的也要改。

#include "widget.h"
#include "ui_widget.h"
#include "item.h"

class item;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    //ui->setupUi(this);
    item *item1 = new item(":/icons/icon1.jpg", true, "一只猫",this);

}

Widget::~Widget()
{
    delete ui;
}

运行看看能不能行:

是没有问题的。

接下来就只要把好友添加到列表里面去就可以了

在 widget.cpp 里面引进  #include <QListWidgetItem> 并创建 QListWidgetItem

#include "widget.h"
#include "ui_widget.h"
#include "item.h"

#include <QListWidgetItem>

class item;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建信息
    item *qqitem0 = new item(":/icons/icon1.jpg", true, "一只猫");
    //创建项
    QListWidgetItem *item0 = new QListWidgetItem();
    //在Listwidget 里面添加一个项
    ui->listWidget->addItem(item0);
    //把 qqitem0 导入到 listwidget item0
    ui->listWidget->setItemWidget(item0, qqitem0);
}

Widget::~Widget()
{
    delete ui;
}

运行看看效果:

可以看到这个项比较小,需要我们给他改大一点,进入 ui 界面, 改变 listwidget 的样式表。

QListWidget::item{height: 50px}

看看效果:

就是这样,然后重复添加一些项目,改一下 listwidget 的样式表 和 focuspolicy 就好了。

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "item.h"

#include <QListWidgetItem>

class item;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建信息
    item *qqitem0 = new item(":/icons/icon1.jpg", true, "一只猫");
    item *qqitem1 = new item(":/icons/icon0.jpg", false, "asfa");
    item *qqitem2 = new item(":/icons/icon2.jpg", true, "萨法");
    item *qqitem3 = new item(":/icons/icon3.jpg", false, "阿斯顿飞尽");
    //创建项
    QListWidgetItem *item0 = new QListWidgetItem();
    QListWidgetItem *item1 = new QListWidgetItem();
    QListWidgetItem *item2 = new QListWidgetItem();
    QListWidgetItem *item3 = new QListWidgetItem();
    //在Listwidget 里面添加一个项
    ui->listWidget->addItem(item0);
    ui->listWidget->addItem(item1);
    ui->listWidget->addItem(item2);
    ui->listWidget->addItem(item3);
    //把 qqitem0 导入到 listwidget item0
    ui->listWidget->setItemWidget(item0, qqitem0);
    ui->listWidget->setItemWidget(item1, qqitem1);
    ui->listWidget->setItemWidget(item2, qqitem2);
    ui->listWidget->setItemWidget(item3, qqitem3);
}

Widget::~Widget()
{
    delete ui;
}

listwidget 样式表:

QListWidget::item{height: 50px}
QListWidget::item:selected{background-color: rgb(200,200,200)}
QListWidget::item:hover{background-color: rgb(220,220,220)}

最后效果:

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

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

相关文章

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展&#xff0c;我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代&#xff0c;一个名为Vatee万腾的平台正以其独特的魅力&#xff0c;引领我们走向一个更加智能的未来。 Vatee万腾&#xff0c;这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

Jacob------VBA的局限性(复杂批注的获取方式)

问题再现&#xff1a; 同一个字段被多个批注 使用VBA代码是获取不到他们的关系的 &#xff0c;原因如下&#xff1a; 同一个字段被多个批注&#xff0c;并且每个批注都有回复是无法通过VBA语言获取的 &#xff0c;解释如下&#xff1a; ① 微软Microsoft 官方文档 提供的API …

微信营销自动化(朋友圈自动点赞工具):UIAutomation的解决方案

文章不用看, 是AI生成的, 请直接查看下载地址 http://www.aisisoft.top . 微信朋友圈自动点赞工具, 自动群发工具 在当今的数字化营销领域&#xff0c;自动化工具成为了提升工作效率、增强客户互动的关键。本文将详细介绍一款基于UIAutomation框架与Python语言构建的微信营销自…

【MySQL】如果表被锁可以尝试看一下事务

今天在MySQL中删除表的时候&#xff0c;发现无法删除&#xff0c;一执行drop&#xff0c;navicat就卡死。 通过 SHOW PROCESSLIST显示被锁了 kill掉被锁的进程后依旧被锁 最后发现是由于存在为执行完的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; kill掉这些事务以…

Excel 查找后隐去右边列

Excel 有几列数字 ABC11002042002202100102326027010841199100512100100 当给定参数时&#xff0c;请从每行找到该参数&#xff0c;隐去右边的列。如果某行不含该参数&#xff0c;则隐去整行。当参数是 100 时&#xff0c;结果如下&#xff1a; ABC710082021009119910010121…

挑战极限外,交易无疆界

交易&#xff0c;并非是仅限于金融行业的专属舞台&#xff01;在Eagle Trader&#xff0c;我们深信&#xff0c;无论您来自何方&#xff0c;都怀揣着独特的视角和优势&#xff0c;能在交易场上展现出别具一格的策略。 我们热烈欢迎来自各行各业的交易者&#xff0c;因为正是你…

随心笔记,第七更之Java 加密Jar包

目录 一、Linux搭建golang环境 二、Jar包加密 &#xff08;一&#xff09;、环境配置 &#xff08;1&#xff09;Linux &#xff08;1&#xff09;下载Go语言二进制包 &#xff08;2&#xff09;解压缩到/usr/local目录 &#xff08;3&#xff09;设置环境变量 &#x…

vue3,pinia状态管理,手写插件实现持久化

状态管理和持久化 先简单概述一下状态管理和持久化 状态管理&#xff1a;使任意两个组件共享数据持久化&#xff1a;将共享的数据保存在本地&#xff0c;不随页面销毁而消失 要实现状态的持久化&#xff0c;可以直接采用插件的形式实现&#xff0c;插件其实就是一个函数&#…

【多通道卷积终结篇,通俗易懂,清晰必读】

作为常识&#xff0c; 1、卷积层 输出特征图通道数 卷积核个数 与输入特征图通道数无关&#xff0c; 2、多卷积核处理多通道特征图的机制过程如下&#xff1a; 本文的参考资料为知乎&#xff1a;一文读懂Faster RCNN。 对于多通道图像多卷积核做卷积&#xff0c;计算方式如…

Java 编程语言:过去、现在与未来

引言 自 1995 年由 Sun Microsystems 发布以来&#xff0c;Java 编程语言已经走过了漫长的道路。作为一种面向对象的编程语言&#xff0c;Java 因其“一次编写&#xff0c;到处运行”的理念而广受欢迎。本文将探讨 Java 的历史、主要特点、应用领域以及未来的发展趋势。 Java…

使用 Mac 数据恢复从 iPhoto 图库中恢复照片

我们每个人都会遇到这种情况&#xff1a;在意识到我们不想丢失照片之前&#xff0c;我们会永久删除 iPhoto 图库中的一些照片。永久删除这些照片后&#xff0c;是否可以从 iPhoto 图库中恢复照片&#xff1f;本文将指导您使用免费的 Mac 数据恢复软件从 iPhoto 中恢复照片。 i…

【漏洞复现】锐捷统一上网行为管理与审计系统——远程命令执行漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 锐捷统一上网行为管理与审计系统naborTable/static_convert.php…

AIGC遇上ChatGPT,互联网公司的创意设计师,还能做什么?

随着科技的日新月异&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;和ChatGPT等AI技术的涌现&#xff0c;为互联网公司的创意设计师们描绘了一幅充满挑战与机遇的新图景。在这个数字化、智能化的新时代&#xff0c;创意设计师们不仅要保持敏锐的审美眼光和源源不断的…

梅雨季,祛湿不健脾,湿气易反复!4个方法助您健脾胃,祛湿气!

进入梅雨季以来&#xff0c;苏州连续降雨&#xff0c;空气湿度增加&#xff0c;我们身体内的湿气也愈加严重&#xff1a;身上胖嘟嘟、脸上油乎乎、身体困重、乏力&#xff0c;极易疲劳&#xff0c;食欲减退&#xff0c;头昏昏沉沉的&#xff0c;大便也十分黏腻…… 关于祛湿&am…

东昂科技从创业板改道北交所:大客户依赖症明显,巨额分红又募投补流

《港湾商业观察》施子夫 黄懿 2024年6月24日&#xff0c;厦门东昂科技股份有限公司&#xff08;以下简称&#xff0c;东昂科技&#xff09;在北交所网站披露第二轮审核问询函的回复。自2024年1月IPO申请获北交所受理以来&#xff0c;东昂科技已经收到北交所下发的两轮审核问询…

使用官方新工具手动升级 Quest 操作系统

Meta 近期推出了一款用于手动升级 Meta Quest 系统的工具&#xff0c;为用户提供了更多选择。本文将详细介绍如何使用这一工具进行系统升级。 优势与劣势 优势&#xff1a; 安装迅速&#xff1a;升级速度相比在线自动升级快&#xff0c;且可实时查看进度 即时升级&#xff1…

筛斗数据:数据提取技术,让信息海洋变得有序

在数字化时代&#xff0c;信息如同浩渺的海洋&#xff0c;源源不断地涌入我们的生活和工作。然而&#xff0c;这个信息海洋的浩瀚与繁杂也给我们带来了挑战&#xff1a;如何在海量的数据中快速找到有价值的信息&#xff1f;数据提取技术&#xff0c;作为一种强大的工具&#xf…

权威VS实战:如何权衡六西格玛培训证书的两种价值?

当我们谈论六西格玛培训证书时&#xff0c;我们不得不提到两种截然不同的“身份象征”。一种是由专业培训机构颁发的证书&#xff0c;这种证书在质量管理领域同样具有不可忽视的价值。 培训机构颁发的六西格玛证书&#xff0c;不仅代表着你已经完成了他们精心设计的培训课程&a…

【启明智显分享】低成本RISC-V工业级HMI方案推荐

伴随着工业4.0的迅猛发展&#xff0c;工业HMI以方便、快捷的特点逐渐成为工业的日常应用&#xff0c;成为备受追捧的全新多媒体交互设备。 什么是工业HMI&#xff1f;工业HMI是用于工业自动化系统中的人机交互界面&#xff0c;通常由触摸屏、按钮、指示灯、显示器等组成&#…

集成openfeign

集成feign有两种方式. 1.集成到所需项目中(只有该项目可以用)直接引用所需调用的项目 2.集成到公共项目(通用) 1.集成到所需项目中(只有该项目可以用) 再需要消费的服务 进行依赖的引用 1.引入依赖,openfeign,和所需调用的服务 <!--feign--><dependency><gro…