Qt學習筆記 ListWidget的增刪改


學習了一下ListWidget控件的使用,做一個小功能增刪改

先把代碼分解最后給出完整代碼

在窗體上添加一個ListWidget 一個Horizontal Specer和  三個PushButton

效果如下

因為構造函數中的SetupUi(this)會自動將符合on_objectName_signalName()命名

的任意槽與相應的objectName的signalName()信號連接到一起

我就直接在.h文件里添加槽的聲明 

private slots:
    void on_btn_AddEvent_clicked();
    void on_btn_Del_clicked();
    void on_btn_Modify_clicked();
    void on_lvWid_Source_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);

先在給ListWidget控件添加一些元素

MyElementsView::MyElementsView(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyElementsView)
{
    ui->setupUi(this);

    for(int i=0;i<5;i++)
    {
        ui->lvWid_Source->addItem(tr("item : ") + QString::number(i));
    }
}

這樣ListWidget就有5個元素了

我們再看一下它的curretnItemChanged事件

void on_lvWid_Source_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);

在這里我們把選中行的字體變為藍色行背景變為紅色

在.cpp里實現 

void MyElementsView::on_lvWid_Source_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
    if(current==Q_NULLPTR)return;
    if(previous!=Q_NULLPTR)
    {
        previous->setBackgroundColor(Qt::transparent);
        previous->setTextColor(Qt::black);
    }
    current->setBackgroundColor(Qt::red);
    current->setTextColor(Qt::blue);
}

效果如下

添加事件比較簡單

在cpp實現

void MyElementsView::on_btn_AddEvent_clicked()
{
    ui->lvWid_Source->addItem(tr("new item : ") +QString::number(ui->lvWid_Source->count()));
}

直接用它自己的addItem方法就可以 

刪除有些麻煩

void  MyElementsView::on_btn_Del_clicked()
{
    if(ui->lvWid_Source->currentItem()!=Q_NULLPTR)
    {
        QListWidgetItem * item = ui->lvWid_Source->takeItem(ui->lvWid_Source->currentRow());
        delete item;
    }
}

刪除要先把選中的widget取出來再進行刪除

修改實現也比較簡單

void  MyElementsView::on_btn_Modify_clicked()
{
    if(ui->lvWid_Source->currentItem()!=Q_NULLPTR)
    {
        ui->lvWid_Source->currentItem()->setText(tr("Modify :Item ") +QString::number(ui->lvWid_Source->count()));
    }
}

看一下效果

完整代碼如下

.h

#ifndef MYELEMENTSVIEW_H
#define MYELEMENTSVIEW_H

#include <QDialog>
#include<QListWidgetItem>
namespace Ui {
class MyElementsView;
}

class MyElementsView : public QDialog
{
    Q_OBJECT

public:
    explicit MyElementsView(QWidget *parent = 0);
    ~MyElementsView();

private:
    Ui::MyElementsView *ui;
private slots:
    void on_btn_AddEvent_clicked();
    void on_btn_Del_clicked();
    void on_btn_Modify_clicked();
    void on_lvWid_Source_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
};

#endif // MYELEMENTSVIEW_H

.cpp完整代碼

#include "myelementsview.h"
#include "ui_myelementsview.h"
#include <QToolBar>
#include<QHBoxLayout>
#include<QMainWindow>
#include<QMessageBox>
#include<QList>

MyElementsView::MyElementsView(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyElementsView)
{
    ui->setupUi(this);

    for(int i=0;i<5;i++)
    {
        ui->lvWid_Source->addItem(tr("item : ") + QString::number(i));
    }
}


void MyElementsView::on_btn_AddEvent_clicked()
{
    ui->lvWid_Source->addItem(tr("new item : ") +QString::number(ui->lvWid_Source->count()));

    //多選
//    const QList<QListWidgetItem *>   items = ui->lvWid_Source->selectedItems();
//    foreach (QListWidgetItem * item, items) {
//        item->text();
//        item->setTextColor(Qt::blue);
//    }
}

void  MyElementsView::on_btn_Del_clicked()
{
    if(ui->lvWid_Source->currentItem()!=Q_NULLPTR)
    {
        QListWidgetItem * item = ui->lvWid_Source->takeItem(ui->lvWid_Source->currentRow());
        delete item;
    }
}

void  MyElementsView::on_btn_Modify_clicked()
{
    if(ui->lvWid_Source->currentItem()!=Q_NULLPTR)
    {
        ui->lvWid_Source->currentItem()->setText(tr("Modify :Item ") +QString::number(ui->lvWid_Source->count()));
    }
}

MyElementsView::~MyElementsView()
{
    delete ui;
}

void MyElementsView::on_lvWid_Source_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
    if(current==Q_NULLPTR)return;
    if(previous!=Q_NULLPTR)
    {
        previous->setBackgroundColor(Qt::transparent);
        previous->setTextColor(Qt::black);
    }
    current->setBackgroundColor(Qt::red);
    current->setTextColor(Qt::blue);
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM