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

news2024/11/16 5:41:46

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)}

最后效果:

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

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

相关文章

Pycharm执行打印console中print数据打印显示不全的解决办法?

#设置显示窗口数据显示完整 pd.set_option(display.max_rows, 500) pd.set_option(display.max_columns, 100) pd.set_option(display.width, 1000)

API-事件类型

学习目标&#xff1a; 掌握事件类型 学习内容&#xff1a; 事件类型鼠标事件焦点事件键盘事件文本事件focus选择器案例 事件类型&#xff1a; 鼠标事件&#xff1a; <title>事件类型-鼠标事件</title><style>div {width: 200px;height: 200px;background-c…

three.js - 置换贴图(displacementMap)、凹凸贴图(bumpMap)、法线贴图(normalMap)

这就是个灰度图 瞅瞅下面的贴图们&#xff0c;加深一下印象吧 说一下灰度图 在灰度图中&#xff0c; 黑色&#xff1a;代表最低的深度&#xff08;或最低的置换&#xff09; 白色&#xff1a;代表最高的深度&#xff08;或最高的置换&#xff09; 中间的灰度值&#xff0c;则…

链在一起联机存档同步教程 教你如何学会链在一起联机同存档

双人成行&#xff0c;四人更行了&#xff0c;说的就是新游戏链在一起&#xff0c;多人合作冒险游戏&#xff0c;一个是和兄弟四人一起玩的游戏&#xff0c;游戏中四个人被铁链绑在一起&#xff0c;大型节目之好兄弟到底谁是脑瘫正在上演&#xff0c;甚至有些玩家感觉链子牵的不…

SAP消息号 VF028

客户在VF11冲销发票之后&#xff0c;没有生成正式的财务凭证&#xff0c;然后VF02的时候出现如下报错&#xff1a; “自动清算出具发票凭证XXXXXXX&#xff08;被冲销凭证号&#xff09;且不可能取消凭证XXXXXXX&#xff08;冲销凭证号&#xff09; 原因&#xff1a;销售订单2…

归并排序和计数排序

目录 1.归并排序1.1递归1.1基本思想1.2算法描述1.3画图解释1.4代码实现 1.2非递归 2.计数排序2.1基本思想2.2算法描述3.画图解释 1.归并排序 1.1递归 1.1基本思想 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xf…

毫米波移动通信系统中的波束赋形—基于AOD估计的波束赋形

基于AOD估计的波束赋形依据压缩感知理论&#xff0c;利用毫米波信道的稀疏特性[18][19]&#xff0c;提出对信号的AOA和AOD进行估计&#xff0c;根据估计方向进行波束赋形。由于毫米波信道的稀疏特性&#xff0c;假设有L条多径分量时&#xff0c;公式1中的信道矩阵H可以表示为下…

软件质量保证与测试

目录 一、测试流程 二、测试用例 2.1概念 2.2用例编写格式 三、设计测试点 3.1等价类 3.1.1概念 3.1.2案例 3.1.3适用场景 3.1.4执行用例 3.2边界值 3.2.1概念 3.2.2案例 3.2.3使用场景 3.3判定表 3.3.1判定表使用原因 3.3.2概念 3.3.3案例 3.3.4使用场景 …

宏定义__FILE__,__LINE__,__VA_ARGS__等介绍与应用

ANSIC标准定义中常见的预定义宏 __LINE__&#xff1a;在源代码中插入当前源代码行号&#xff1b; __FILE__&#xff1a;在源代码中插入当前源代码路径及文件名&#xff1b; __DATE__&#xff1a;在源代码中插入当前编译日期&#xff1b; __TIME__&#xff1a;在源代码中插入…

全域运营系统是如何做好全平台运营?

当前&#xff0c;全域运营的热度持续上涨&#xff0c;多篇分析全域运营平台优缺点的帖子也在多个创业者交流群中风靡一时。综合来看&#xff0c;在众多的全域运营平台中&#xff0c;属后面我们说的这家全域运营平台的分析最为详尽。 其中&#xff0c;对于我们的全域运营平台的优…

Diffusion Mamba:用于CT到MRI转换的Mamba扩散模型

Diffusion Mamba&#xff1a;用于CT到MRI转换的Mamba扩散模型 提出背景拆解左侧&#xff1a;整体框架中间&#xff1a;Mamba块的细节右侧&#xff1a;螺旋扫描的细节 提出背景 论文&#xff1a;https://arxiv.org/pdf/2406.15910 代码&#xff1a;https://github.com/wongzbb…

macOS Sequoia 15 beta 2 (24A5279h) Boot ISO 原版可引导镜像下载 (iPhone Mirroring 现已支持)

macOS Sequoia 15 beta 2 (24A5279h) Boot ISO 原版可引导镜像下载 (iPhone Mirroring 现已支持) iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-…

有没有品质高的开放式蓝牙耳机推荐,这几款开放式耳机非常值得

随着科技的发展&#xff0c;越来越多的人选择开放式蓝牙耳机&#xff0c;对比传统的耳机&#xff0c;开放式蓝牙耳机可以提供更加自然的听觉体验&#xff0c;减少外部环境隔绝感&#xff0c;增强安全性&#xff0c;透气设计舒适度更高&#xff0c;也更加的干净卫生。深受运动爱…

如何挑选护眼灯?一分钟带你了解挑选护眼灯的六大准则!

小时候&#xff0c;对正确用眼知识一无所知&#xff0c;也不明白何种光线环境对眼睛最为友善&#xff0c;结果如今的近视度数已濒临千度大关。虽然早已习惯佩戴眼镜的生活&#xff0c;但近视所带来的诸多不便仍旧在日常生活中无处不在。因此&#xff0c;对于家中孩子的视力健康…

echarts+vue2实战(二)

目录 一、WebSocket【双向通信】的使用 1.1、前端 1.2、后端 二、前端组件的合并与优化 三、全屏切换 3.1、单页面切换 3.2、同页面多端联动 四、主题切换 4.1、单页面切换 4.2、同页面多端联动 一、WebSocket【双向通信】的使用 1.1、前端 在utils文件夹里创建soc…

【漏洞复现】华测监测预警系统——SQL注入漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 华测监测预警系统2.2版本存在sql注入&#xff0c;UserEdit接口S…

用构造函数为对象的数据成员实现输入和输出时间

在C程序中&#xff0c;对象的初始化是一个不可缺少的重要问题。不应该让程序员在这个问题上花过多的精力&#xff0c;C在类的设计中提供了较好的处理方法。 为了解决这个问题&#xff0c;C提供了构造函数&#xff08;constructor&#xff09;来处理对象的初始化。构造函…

【前端】HTML+CSS复习记录【1】

文章目录 前言一、p、br&#xff08;段落、换行&#xff09;二、短语标签&#xff08;用来呈现为被强调的文本&#xff09;三、sub、sup&#xff08;下标、上标&#xff09;四、b&#xff08;加粗文本&#xff09;五、块级元素与行内元素六、元素嵌套七、html注释系列文章目录 …

axios全局封装AbortController取消重复请求

为什么&#xff1f; 问题&#xff1a;为什么axios要配置AbortController&#xff1f;防抖节流不行吗&#xff1f; 分析&#xff1a; 防抖节流本质上是用延时器来操作请求的。防抖是判断延时器是否存在&#xff0c;如果存在&#xff0c;清除延时器&#xff0c;重新开启一个延…

【JavaEE】浅谈线程(二)

线程 线程的常见属性 线程属性可以通过下面的表格查看。 •ID 是线程的唯⼀标识&#xff0c;不同线程不会重复 • 名称是各种调试⼯具⽤到&#xff08;如jconsoloe&#xff09; • 状态表示线程当前所处的⼀个情况&#xff0c;下⾯我们会进⼀步说明 • 优先级高的线程理论上来…