首页 > 其他分享 >Qt - QListWidget+QListWidgetItem

Qt - QListWidget+QListWidgetItem

时间:2024-04-30 15:11:56浏览次数:14  
标签:QListWidget Qt QCustomWidget void QListWidgetItem 条目 item ui

效果:

文件结构:

qcustomwidget.ui

qcustomwidget.h (自定义条目类)

#ifndef QCUSTOMWIDGET_H
#define QCUSTOMWIDGET_H

#include <QWidget>

namespace Ui {
class QCustomWidget;
}

class QCustomWidget : public QWidget//联系人类
{
    Q_OBJECT

public:
    QCustomWidget(QString name, QString phone, QString picturePath,QWidget *parent = nullptr);
    ~QCustomWidget();

    void initUI();
    void setLable(QString name,QString phone);
    void setBtnObject();
    void setBtmVisible();

protected:
    void enterEvent(QEvent *event);
    void leaveEvent(QEvent *event);


public:
    QString m_name;     //姓名
    QString m_phone;    //电话
    QString m_picturePath;//头像路径

    bool flag;

private slots:
    void on_subBtnclicked();
    void on_modBtnclicked();

signals:
    void sig_ClickDelete();
    void sig_ClickModify();

private:
    Ui::QCustomWidget *ui;
};

#endif // QCUSTOMWIDGET_H

qcustomwidget.pp (自定义条目类)

#include "qcustomwidget.h"
#include "ui_qcustomwidget.h"
#include <QDebug>
#include <QMouseEvent>



QCustomWidget::QCustomWidget(QString name, QString phone,QString picturePath,QWidget *parent):QWidget(parent),ui(new Ui::QCustomWidget)
{
    ui->setupUi(this);

    this->m_name = name;
    this->m_phone = phone;
    this->m_picturePath = picturePath;

    this->setFixedWidth(350);

    //ui->mod_Btn->setVisible(false);
    //ui->sub_Btn->setVisible(false);

    initUI();

    connect(ui->mod_Btn, SIGNAL(clicked()), this, SLOT(on_modBtnclicked()));//修改
    connect(ui->sub_Btn, SIGNAL(clicked()), this, SLOT(on_subBtnclicked()));//删除
}

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


void QCustomWidget::initUI()
{
    ui->name_Label->setText(m_name);
    ui->phone_Label->setText(m_phone);
    QPixmap pix(m_picturePath);
    ui->picture_Label->setScaledContents(true);
    ui->picture_Label->setPixmap(pix);
    ui->mod_Btn->setText("修改");
    ui->sub_Btn->setText("删除");
}

void QCustomWidget::setLable(QString name,QString phone)
{
    ui->name_Label->setText(name);
    ui->phone_Label->setText(phone);
}

void QCustomWidget::setBtnObject()
{
    ui->mod_Btn->setObjectName("mod_Btn");
    ui->sub_Btn->setObjectName("sub_Btn");
}

void QCustomWidget::enterEvent(QEvent *ev)
{
    setFocus();
    //ui->mod_Btn->setVisible(true);
    //ui->sub_Btn->setVisible(true);
    qDebug()<<"鼠标进入";
}


void QCustomWidget::leaveEvent(QEvent *event)
{
    setFocusPolicy(Qt::NoFocus);
    //ui->mod_Btn->setVisible(false);
    //ui->sub_Btn->setVisible(false);
    qDebug()<<"鼠标移出";
}

void QCustomWidget::on_subBtnclicked()
{
    emit sig_ClickDelete();
    qDebug()<<"发射信号:sig_ClickDelete()";
}

void QCustomWidget::on_modBtnclicked()
{
    emit sig_ClickModify();
    qDebug()<<"发射信号:sig_ClickModify()";
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QListWidgetItem>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:

    Widget(QWidget *parent = nullptr);
    ~Widget();

    void initListWidget();

public slots:
    void on_itemClicked(QListWidgetItem *item);
    void on_itemDoubleClicked(QListWidgetItem *item);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "qcustomwidget.h"
#include <QDebug>

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    initListWidget();

    //void itemClicked(QListWidgetItem *item)//当鼠标按钮单击小部件中的项目时,该信号与指定的项目一起发出。
    //void itemDoubleClicked(QListWidgetItem *item)//当在小部件中的项上双击鼠标按钮时,此信号将随指定项一起发出。
    connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(on_itemClicked(QListWidgetItem*)));
    connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(on_itemDoubleClicked(QListWidgetItem*)));
}

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

void Widget::initListWidget()
{
    //先加入头文件ItemWidget
    //1、实例化一个条目项类的对象
    QListWidgetItem *item = new QListWidgetItem;
    //2、实例化一个自定义条目项界面类的对象
    QCustomWidget *customWidget = new QCustomWidget("张三","123456",":/image/1.jpeg");
    //3、将条目项 添加到 列表控件上
    ui->listWidget->addItem(item);
    //4、将当前界面 和 条目项绑定起来
    ui->listWidget->setItemWidget(item,customWidget);
    //5、根据自定义条目项的界面大小  动态 调整 条目项的大小
    item->setSizeHint(customWidget->size());


    //先加入头文件ItemWidget
    //1、实例化一个条目项类的对象
    QListWidgetItem *item1 = new QListWidgetItem;
    //2、实例化一个自定义条目项界面类的对象
    QCustomWidget *customWidget1 = new QCustomWidget("李四","666666",":/image/1.jpeg");
    //3、将条目项 添加到 列表控件上
    ui->listWidget->addItem(item1);
    //4、将当前界面 和 条目项绑定起来
    ui->listWidget->setItemWidget(item1,customWidget1);
    //5、根据自定义条目项的界面大小  动态 调整 条目项的大小
    item1->setSizeHint(customWidget1->size());
}


void Widget::on_itemClicked(QListWidgetItem *item)
{
    //item就是我们点击的条目项
    //其实我们想要获取的是点击的那个条目项所绑定的界面类对象指针
    //ui->listWidget->itemWidget(item)原本是QWidget类型,
    //如果是QWidget *widget = ui->listWidget->itemWidget(item); 就是基类指针指向派生类对象
    //dynamic_cast<ItemWidget*>动态类型转换成ItemWidget
    QCustomWidget *widget = dynamic_cast<QCustomWidget*>(ui->listWidget->itemWidget(item)) ;
    //widget就是我们选中的条目项的指针,可以获取里面的控件和数据了
    //例如调用界面的一个函数,widget->name();

    qDebug()<<"单击-"<<widget->m_name<<widget->m_phone;
}

//列表控件 双击的时候 发射 itemDoubleClicked 信号,执行该槽函数
void Widget::on_itemDoubleClicked(QListWidgetItem *item)
{
    //双击删除
    //返回 你要删除的那个条目项对象指针,需要我们用户手动删除
    //1、先获取你要删除的条目项的那一行的索引号
    int row = ui->listWidget->currentRow();
    //2、获取删除的条目项
    QListWidgetItem *delItem = ui->listWidget->takeItem(row);
    //3、删除
    delete delItem;
    qDebug()<<"双击-删除条目成功";
}

 

标签:QListWidget,Qt,QCustomWidget,void,QListWidgetItem,条目,item,ui
From: https://www.cnblogs.com/zhuchunlin/p/18168051

相关文章

  • 统信 qt5.15.2安装
    mount挂载windows(dai)共享文件夹参考:https://www.cnblogs.com/LiuYanYGZ/p/12043945.html$cd/data/home/uos01/$mkdirwindows_share$sudomount-tcifs-ousername=share,password=share//192.168.11.111/share./windows准备要装环境的路径$cd/data/home/uos......
  • Qt Excel读写 QXlsx的安装配置以及测试
    引言Qt无自带的库处理Excel文件,但可通过QAxObject借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库:QXlsx,一个基于Qt库开发的用于读写MicrosoftExcel文件的C++库。它提供了一组简单易用的API,可以方便地创建、修改和操作Excel文件。一、安装配置1.下载源码,如下图所......
  • Qt Excel的读写
    在Qt中,可以使用第三方库来处理Excel文件,常用的库包括:QXlsx:一个基于Qt的Excel文件处理库,支持读写Excel文件。LibXL:一个商业的Excel文件处理库,支持多种编程语言,包括C++。OpenXLSX:一个开源的Excel文件处理库,支持读写Excel文件,支持多种操作系统。下......
  • Qt Creator + MSVC2017编译器配置指南
    QtCreator+MSVC2017编译器配置指南下载和安装MSVC2017编译器下载下载MSVC编译器安装工具:https://docs.microsoft.com/zh-tw/previous-versions/visualstudio/visual-studio-2017/install/use-command-line-parameters-to-install-visual-studio?view=vs-2017安装安......
  • 给Qt搭建一个简单的Json服务器用于软件调试
    一.vscode+nodejs+npm安装二.nodejs服务器开启打开vscode-终端-新建终端进入json_server目录cdD:\json_server运行启动命令,启动json-server服务器npmrunjson:server效果如下:PSD:\json_server>npmrunjson:server>[email protected]:se......
  • Qt-Model/View综合示例
    相关类简介Qt和Model/View模式相关的类比较多,但一般存在继承关系,按model(模型),view(视图),delegate(委托)划分为如下几种:类型类名简介父类modelQAbstractItemModel(抽象类)常用的Model的基类QObjectQStandardItemModel通用model可以实现以下任意类型......
  • Qt控件QSplitter的用法
    简介继承自QFrame构造创建竖排分割窗口(一列多行)QSplitter*splitterVertical=newQSplitter(Qt::Vertical,nullptr);创建横排分割窗口(一行多列)QSplitter*splitterHorizontal=newQSplitter(Qt::Horizontal,nullptr);添加部件以子控件的方式添加QTex......
  • Qt QSettings读写ini时 General 读不出来值
    简述我有一个配置文件,其中一个组General,怎么都读不出正确的值,全是空,但是别的组能读出来,改General2试试,果然可以,就怀疑是不是组名称被内置了。打开QSettings的帮助文档,搜索General,有内容,看下解释TheINIfileformathassevererestrictionsonthesyntaxofakey.Qt......
  • Python-PyQt5接口压测工具分享
    1、页面介绍  2、运行效果 ......
  • 【Qt 专栏】DateTime日期时间组件
    本文转载自:https://cloud.tencent.com.cn/developer/article/2371799本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。 在Qt中,日期和时间的处理通常使用QDateTime类。QDateTime是一个用于表示日期和时间的类,而与之相关的组件还包括QDate、QTime以及QDateTi......