当前位置:网站首页>QT笔记——自定义的QListWidget
QT笔记——自定义的QListWidget
2022-07-22 03:13:00 【旧街凉风°】
我们想有一个和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<CustomItemWidget*>(ui.listWidget->itemWidget(item));
if (customItemWidget == nullptr)
return;
QList<QPushButton*> listBtns = customItemWidget->findChildren<QPushButton*>();
for (auto & btn:listBtns)
{
qDebug() <<btn->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 <QtWidgets/QWidget>
#include "ui_QCustomListWidget.h"
#include <QListWidgetItem>
#include <QListWidget>
#include "CustomItemWidget.h"
#include <QMessageBox>
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<CustomItemWidget*>(ui.listWidget->itemWidget(item));
if (customItemWidget == nullptr)
return;
QList<QPushButton*> listBtns = customItemWidget->findChildren<QPushButton*>();
for (auto & btn:listBtns)
{
qDebug() <<btn->objectName() << btn->text();
}
}
CustomItemWidget .ui
CustomItemWidget .h
#pragma once
#include <QWidget>
#include "ui_CustomItemWidget.h"
#include "CustomItemSubWidget.h"
#include <QMessageBox>
#include <QDebug>
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的效果图:
边栏推荐
- socket通信中select函数用法
- 认识垃圾回收
- Record a summary of JMeter pressure test practice
- 企业需要建立属于自己的小程序及APP需要做什么前期工作?
- 10 automated test frameworks for test engineers
- Barcode (bar code)
- [js]: splice(), charCodeAt()
- ROS learning (28) Web GUI
- Deep learning 8 deep model optimization and regularization
- C language question bank part.1
猜你喜欢
Word:插入指定颜色的矢量图
3年测试在职经验,面试测试岗连20k都拿不到了吗?有这么坑?
深度学习之 8 深度模型优化与正则化
别找了,全都帮你整理好了——SQL语句大全
命令行程序测试自动化
[06] instruction jump: it turns out that if... Else is goto
GeneralizedRCNN:features = OrderedDict([(“0“, features)])
Detailed teaching of address book in C language
C language to print a specific * asterisk pattern on the screen
Cookies and sessions
随机推荐
__call__函数
DOM之预加载和懒加载
小乌龟上传远程仓库
Debugging VBS Visual Studio
Monte Carlo tree search (MCTS) explanation
C language question bank part.1
C语言实现在屏幕上打印特定的*星号图案
OPENCN学习DAY3
Several methods that affect the original array
Leetcode high frequency question: zigzag (zigzag, zigzag) sequence traversal of binary tree
2022社交电商模式怎么裂变营销?—分享购
Cloud native ide: the first general and powerful codeless development platform of IVX
广告无处不在,如何利用广告去推广自己的产品?
V-IF, V-for, list filtering and sorting, forced binding of class and style, and collection of form information
Design of SKU database for commodity information
StrMultiplyStr
Cookies and sessions
18.redis的持久化机制是什么?各自的优缺点?
浅拷贝,深拷贝(实现方式)
Little turtle uploading to remote warehouse