1. 程式人生 > 實用技巧 >Qt學習筆記ListWidget的增刪改,控制元件的使用

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);
}