Qt學習筆記ListWidget的增刪改,控制元件的使用
阿新 • • 發佈:2020-12-25
學習了一下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); }