欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

主界面UI

操作流程:

主窗口中央控件是QListWidget,點擊添加按鈕,會隨機向主窗口中央控件中添加自定義item;

選中某條前的可選框,如果選中,點擊右側(cè)的刪除圖標,會彈出提示是否刪除;如果不選中,右側(cè)刪除圖標無法點擊;

點擊是,刪除當前item,點擊否,不刪除。

實現(xiàn)需解決問題

1:如何在QListWidget中添加帶有按鈕、文本等其它控件的項?

2:選中某項后如何響應?QListWidget自帶的item響應為什么不生效?

3:如何選中刪除按鈕后,通知QListWidget做出刪除當前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:
   // 添加項
   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{

    }
}

增加一個隨機顯示圖標和文本的類

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實現(xiàn)自定義Item的文章就介紹到這了,更多相關(guān)Qt QListWidget自定義Item內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux系統(tǒng)下C語言中的標準IO總結(jié)

    Linux系統(tǒng)下C語言中的標準IO總結(jié)

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

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

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

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

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

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

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

    C++ odr用法案例詳解

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

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

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

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

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

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

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