Qt学习笔记 ListWidget的增删改

简介: 学习了一下ListWidget控件的使用,做一个小功能增删改 先把代码分解最后给出完整代码 在窗体上添加一个ListWidget 一个Horizontal Specer和  三个PushButton 效果如下 因为构造函数中的SetupUi(this)会自动将符合on_objectNam...

学习了一下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);
}

 

 

目录
相关文章
|
2月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
101 1
|
6月前
|
SQL 关系型数据库 MySQL
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
302 0
|
数据库 C#
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
|
Java 数据管理 数据库连接
curd 操作| 学习笔记
快速学习 curd 操作。
124 0
curd 操作| 学习笔记
|
SQL 存储 数据库
Sql知识总结-库表视图的增删改查
Sql知识总结-库表视图的增删改查
162 0
|
物联网 Shell 数据库
SQLite 插入和修改操作 | 学习笔记
快速学习 SQLite 插入和修改操作
|
存储 SQL 安全
FMDB | 实现数据的增删改查
FMDB是一个轻量级的数据库,用于将网络资源存储在本地。 项目中使用 ARC 还是 MRC,对使用 FMDB 都没有任何影响,FMDB 会在编译项目时自动匹配。 FMDB 将 SQLite API 进行了很友好的封装,使用起来非常方便。
263 0
|
SQL 数据库 计算机视觉
Qt实用技巧:使用QTableView、QSqlTableMode与QSqlDatabase对数据库数据进行操作
Qt实用技巧:使用QTableView、QSqlTableMode与QSqlDatabase对数据库数据进行操作
Qt实用技巧:使用QTableView、QSqlTableMode与QSqlDatabase对数据库数据进行操作
|
关系型数据库 MySQL 数据库
MySQL数据库(16):高级数据操作-更新数据
MySQL数据库(16):高级数据操作-更新数据