栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

QT笔记——自定义的QListWidget

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT笔记——自定义的QListWidget

我们想有一个和QListWidget 不一样的item,这是时候 我们就需要自己定义了Item

第一:添加我们的自定义ItemWidget

QListWidgetItem* listItem = new QListWidgetItem(ui.listWidget);
CustomItemWidget* customWidget = new CustomItemWidget();
listItem->setSizeHint(QSize(330, 80));
ui.listWidget->addItem(listItem);
ui.listWidget->setItemWidget(listItem, customWidget);

第二:点击我们的itemWidget获取控件的一些内容 获取自定义ItemWidget里面的内容

connect(ui.listWidget, &QListWidget::itemClicked, this, &QCustomListWidget::SLOT_ListWidget_ItemClicked);

void QCustomListWidget::SLOT_ListWidget_ItemClicked(QListWidgetItem* item)
{
    CustomItemWidget* customItemWidget = static_cast(ui.listWidget->itemWidget(item));
    if (customItemWidget == nullptr)
        return; 

    QList listBtns = customItemWidget->findChildren();

    for (auto & btn:listBtns)
    {
        qDebug() <objectName() << btn->text();
    }

}

第三步:我们需要响应我们ItemWidget发出来的控件的点击信号,获取其他控件的一些信号

CustomItemWidget* customWidget = new CustomItemWidget();

connect(customWidget, &CustomItemWidget::EmitPushButtonClicked, this, [=](){
        QMessageBox::information(nullptr, "456", "123");
        })

完整代码如下:
QCustomListWidget .ui

QCustomListWidget .h

#pragma once

#include 
#include "ui_QCustomListWidget.h"
#include 
#include 
#include "CustomItemWidget.h"
#include 

class QCustomListWidget : public QWidget
{
    Q_OBJECT

public:
    QCustomListWidget(QWidget *parent = Q_NULLPTR);

private slots:
    void SLOT_ListWidget_ItemClicked(QListWidgetItem *item);

private:
    Ui::QCustomListWidgetClass ui;
};

QCustomListWidget .cpp

#include "QCustomListWidget.h"

QCustomListWidget::QCustomListWidget(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

    //第一个ItemWidget
    QListWidgetItem* listItem = new QListWidgetItem(ui.listWidget);
    CustomItemWidget* customWidget = new CustomItemWidget();
    listItem->setSizeHint(QSize(330, 80));
    ui.listWidget->addItem(listItem);
    ui.listWidget->setItemWidget(listItem, customWidget);
   
    connect(customWidget, &CustomItemWidget::EmitPushButtonClicked, this, [=](){
        QMessageBox::information(nullptr, "456", "123");
        })

    connect(ui.listWidget, &QListWidget::itemClicked, this, &QCustomListWidget::SLOT_ListWidget_ItemClicked);
  
}

void QCustomListWidget::SLOT_ListWidget_ItemClicked(QListWidgetItem* item)
{
    CustomItemWidget* customItemWidget = static_cast(ui.listWidget->itemWidget(item));
    if (customItemWidget == nullptr)
        return; 

    QList listBtns = customItemWidget->findChildren();

    for (auto & btn:listBtns)
    {
        qDebug() <objectName() << btn->text();
    }

}

CustomItemWidget .ui

CustomItemWidget .h

#pragma once

#include 
#include "ui_CustomItemWidget.h"
#include "CustomItemSubWidget.h"
#include 
#include 

class CustomItemWidget : public QWidget
{
	Q_OBJECT

public:
	CustomItemWidget(QWidget* parent = Q_NULLPTR);
	~CustomItemWidget();

private:
	void InitItemWidget();

signals:
	void EmitPushButtonClicked(int);

public slots:
	void on_toolButton_clicked();
	void on_pushButton_1_clicked();

private:
	Ui::CustomItemWidget ui;

	bool m_isShow;              //是否显示后面的内容

};

CustomItemWidget .cpp

#include "CustomItemWidget.h"

CustomItemWidget::CustomItemWidget(QWidget* parent)
	: QWidget(parent), m_isShow(true)
{
	ui.setupUi(this);

	InitItemWidget();

}

CustomItemWidget::~CustomItemWidget()
{

}

void CustomItemWidget::InitItemWidget()
{
	ui.widget->hide();
	ui.pushButton_add->hide();

}

void CustomItemWidget::on_toolButton_clicked()
{
	if (!m_isShow)
	{
		ui.widget->hide();
		ui.pushButton_add->hide();
		m_isShow = true;
	}
	else
	{
		ui.widget->show();
		ui.pushButton_add->show();
		m_isShow = false;
	}
	
}

void CustomItemWidget::on_pushButton_1_clicked()
{
	emit EmitPushButtonClicked(10);
}

效果图:
添加自定义ItemWidget的效果

点击ItemWidget的第一个按钮 的 效果

点击ItemWidget的效果图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号