亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt使用QListWidget實(shí)現(xiàn)自定義Item

 更新時(shí)間:2023年10月22日 13:59:48   作者:FreeLikeTheWind.  
這篇文章主要為大家詳細(xì)介紹了Qt如何使用QListWidget實(shí)現(xiàn)自定義Item的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

主界面UI

操作流程:

主窗口中央控件是QListWidget,點(diǎn)擊添加按鈕,會(huì)隨機(jī)向主窗口中央控件中添加自定義item;

選中某條前的可選框,如果選中,點(diǎn)擊右側(cè)的刪除圖標(biāo),會(huì)彈出提示是否刪除;如果不選中,右側(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux系統(tǒng)下C語言中的標(biāo)準(zhǔn)IO總結(jié)

    Linux系統(tǒng)下C語言中的標(biāo)準(zhǔn)IO總結(jié)

    最近用到了C語言的標(biāo)準(zhǔn)IO庫,由于對(duì)其中的一些細(xì)節(jié)不是非常清楚,導(dǎo)致了許多Bug,花了好長(zhǎng)時(shí)間來調(diào)試,所以在此做個(gè)筆記,這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下C語言中標(biāo)準(zhǔn)IO的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • C++實(shí)現(xiàn)LeetCode(48.旋轉(zhuǎn)圖像)

    C++實(shí)現(xiàn)LeetCode(48.旋轉(zhuǎn)圖像)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(48.旋轉(zhuǎn)圖像),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中一維數(shù)組與指針的關(guān)系詳細(xì)總結(jié)

    C++中一維數(shù)組與指針的關(guān)系詳細(xì)總結(jié)

    以下是對(duì)C++中一維數(shù)組與指針的關(guān)系進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下
    2013-09-09
  • Linux中使用C語言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例

    Linux中使用C語言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例

    這篇文章主要介紹了Linux中使用C語言實(shí)現(xiàn)基于UDP協(xié)議的socket通信示例,服務(wù)器端與客戶端的功能都非?;A(chǔ),需要的朋友可以參考下
    2016-03-03
  • C++ odr用法案例詳解

    C++ odr用法案例詳解

    這篇文章主要介紹了C++ odr用法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C/C++可變參數(shù)的使用

    C/C++可變參數(shù)的使用

    可變參數(shù)的使用方法遠(yuǎn)遠(yuǎn)不止以下幾種,不過在C,C++中使用可變參數(shù)時(shí)要小心,在使用printf()等函數(shù)時(shí)傳入的參數(shù)個(gè)數(shù)一定不能比前面的格式化字符串中的’%’符號(hào)個(gè)數(shù)少,否則會(huì)產(chǎn)生訪問越界,運(yùn)氣不好的話還會(huì)導(dǎo)致程序崩潰
    2013-09-09
  • C++ 如何使用RapidJson 寫入文件

    C++ 如何使用RapidJson 寫入文件

    RapidJSON 是只有頭文件的 C++ 庫, 不需要編譯, 可以直接在項(xiàng)目中使用, 只需把 include/rapidjson 目錄復(fù)制至系統(tǒng)或項(xiàng)目的 include 目錄即可,下面給大家分享C++ 如何使用RapidJson 寫入文件,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • C語言實(shí)現(xiàn)經(jīng)典小游戲井字棋的示例代碼

    C語言實(shí)現(xiàn)經(jīng)典小游戲井字棋的示例代碼

    這個(gè)三子棋游戲是在學(xué)習(xí)C語言的過程中自己編寫的一個(gè)小游戲,現(xiàn)在將自己的思路(主要以流程圖形式和代碼中的注釋表達(dá))和具體代碼以及運(yùn)行結(jié)果分享出來以供大家學(xué)習(xí)參考,希望對(duì)大家有所幫助
    2022-11-11
  • 最新評(píng)論