Qt使用QListWidget實(shí)現(xiàn)自定義Item
主界面UI
操作流程:
主窗口中央控件是QListWidget,點(diǎn)擊添加按鈕,會隨機(jī)向主窗口中央控件中添加自定義item;
選中某條前的可選框,如果選中,點(diǎn)擊右側(cè)的刪除圖標(biāo),會彈出提示是否刪除;如果不選中,右側(cè)刪除圖標(biāo)無法點(diǎn)擊;
點(diǎn)擊是,刪除當(dāng)前item,點(diǎn)擊否,不刪除。

實(shí)現(xiàn)需解決問題
1:如何在QListWidget中添加帶有按鈕、文本等其它控件的項(xiàng)?
2:選中某項(xiàng)后如何響應(yīng)?QListWidget自帶的item響應(yīng)為什么不生效?
3:如何選中刪除按鈕后,通知QListWidget做出刪除當(dāng)前item的操作?
示例
首先是主窗口代碼
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
// 添加項(xiàng)
void on_btn_add_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <custemitem.h>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_btn_add_clicked()
{
QListWidgetItem* pItem = new QListWidgetItem("");
ui->listWidget->addItem(pItem);
custemItem* pCustomItem = new custemItem(pItem);
ui->listWidget->setItemWidget(pItem, pCustomItem);
ui->listWidget->setCurrentItem(pItem);
connect(pCustomItem, &custemItem::emit_del, this, [&](QListWidgetItem* pItem){
QMessageBox::StandardButton btn = QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("是否刪除?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if(QMessageBox::No == btn)
return;
ui->listWidget->removeItemWidget(pItem);
delete pItem;
pItem = nullptr;
});
}
其次是自定義QWidget控件代碼
customitem.h
#ifndef CUSTEMITEM_H
#define CUSTEMITEM_H
#include <QWidget>
#include <QListWidgetItem>
namespace Ui {
class custemItem;
}
class custemItem : public QWidget
{
Q_OBJECT
public:
explicit custemItem(QListWidgetItem* pItem, QWidget *parent = nullptr);
~custemItem();
signals:
void emit_del(QListWidgetItem* pItem);
private slots:
void on_pushButton_clicked();
private:
Ui::custemItem *ui;
QListWidgetItem* m_pItem;
};
#endif // CUSTEMITEM_H
customitem.cpp
#include "custemitem.h"
#include "ui_custemitem.h"
#include "defind.h"
custemItem::custemItem(QListWidgetItem* pItem, QWidget *parent) :
QWidget(parent),
ui(new Ui::custemItem),
m_pItem(pItem)
{
ui->setupUi(this);
ui->pushButton->setEnabled(false);
int nRand = qrand()%4;
ui->checkBox->setText(slText.at(nRand));
ui->checkBox->setIcon(QIcon(slIcon.at(nRand)));
connect(ui->checkBox, &QCheckBox::clicked, this, [=](){
ui->pushButton->setEnabled(ui->checkBox->isChecked());
});
}
custemItem::~custemItem()
{
delete ui;
}
void custemItem::on_pushButton_clicked()
{
if(ui->checkBox->isChecked())
{
emit emit_del(m_pItem);
}else{
}
}
增加一個(gè)隨機(jī)顯示圖標(biāo)和文本的類
defind.h
#ifndef DEFIND_H
#define DEFIND_H
#include <QStringList>
#include <QList>
#include <QIcon>
QStringList slText = {"12312312.mp3", "dfdafds.mp4", "zcvzcvzxv.txt", "asdfasdfafsafdf.avi"};
QList<QString> slIcon = {":/res/mp3.png", ":/res/mp4.png", ":/res/TXT.png", ":/res/Video.png"};
#endif // DEFIND_H
最后是main代碼
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
到此這篇關(guān)于Qt使用QListWidget實(shí)現(xiàn)自定義Item的文章就介紹到這了,更多相關(guān)Qt QListWidget自定義Item內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++利用GPAC實(shí)現(xiàn)生成MP4文件的示例代碼
GPAC主要針對學(xué)生和內(nèi)容創(chuàng)作者,代表了一個(gè)跨平臺的多媒體框架,開發(fā)人員可以使用它在?LGPL?許可下制作開源媒體。本文就來用GPAC實(shí)現(xiàn)生成MP4文件,感興趣的可以了解一下2023-02-02
C++學(xué)了這么多年你知道為什么定義類時(shí),類的定義放在.h文件中,而類的實(shí)現(xiàn)放在cpp文件中。它們?yōu)槭裁茨軌蜿P(guān)聯(lián)到一起呢?你知道什么東西可以放在.h文件中,什么不能。什么東西又可以放在cpp文件中。如果你忘記了或是壓根就不明白,那么讀過此文你會清晰無比?。?/div> 2014-09-09
Matlab實(shí)現(xiàn)讀寫txt文件數(shù)據(jù)與進(jìn)制轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了Matlab實(shí)現(xiàn)讀寫txt文件數(shù)據(jù)與進(jìn)制轉(zhuǎn)換的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C++代碼實(shí)現(xiàn)網(wǎng)絡(luò)Ping功能
這篇文章主要介紹了C++代碼實(shí)現(xiàn)網(wǎng)絡(luò)Ping功能,Ping命令被送到本地計(jì)算機(jī)的IP軟件,該命令永不退出該計(jì)算機(jī),本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08
C++實(shí)現(xiàn)單鏈表刪除倒數(shù)第k個(gè)節(jié)點(diǎn)的方法
這篇文章主要介紹了C++實(shí)現(xiàn)單鏈表刪除倒數(shù)第k個(gè)節(jié)點(diǎn)的方法,結(jié)合實(shí)例形式分析了C++單鏈表的定義、遍歷及刪除相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
C語言每日練習(xí)之統(tǒng)計(jì)文本單詞數(shù)及高頻詞
本文文大家準(zhǔn)備了個(gè)C語言練習(xí)題:統(tǒng)計(jì)單詞數(shù)并找出頻率最高的單詞,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,感興趣的可以了解一下2022-05-05
C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn)
這篇文章主要介紹了C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05最新評論

