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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java系列博客

curl的安装与简单使用

35150
来自专栏Kubernetes

Controlling Access to the Kubernetes API

? API Server Ports and IPs By default the Kubernetes API server serves HTTP o...

30180
来自专栏Objective-C

iOS-安装和使用 CocoaPods

54770
来自专栏Python

uwsgi -- unavailable modifier requested: 0 -- 的解决办法

找到对应版本的uwsgi-plugin-python,yum install一下 然后在ini文件中添加plugins = python,或者命令行添加–pl...

53240
来自专栏后台及大数据开发

springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用

首先说下查询缓存:查询缓存就是相同的数据库查询请求在设定的时间间隔内仅查询一次数据库并保存到redis中,后续的请求只要在时间间隔内都直接从redis中获取,不...

12110
来自专栏10km的专栏

cmake:vs2015/MinGW静态编译leveldb

leveldb是google的开源项目(https://github.com/google/leveldb), 在linux下编译很方便,然而官方版本却没有提供...

63160
来自专栏乐沙弥的世界

X86 DBCA, NETCA GIVE JAVA HOTSPOT ERROR IF ON X86_64 HARDWARE

    在使用DBCA命令创建新的数据库时,DBCA命令无法启动。运行的环境是宿主机64bit+AMD cpu, 而客户机为Linux 32bit + Grid...

10420
来自专栏happyJared

Spring Boot 1.0 && 2.0 + Mybatis 多数据源配置与使用

mysql 对应的数据源配置中,定义了实体 Boy 和对应的数据层接口 BoyMapper:

14230
来自专栏技术博文

php QR Code二维码生成类

<?php /* * PHP QR Code encoder * * This file contains MERGED version of PHP ...

41750
来自专栏Hongten

How to create a project with Oracle Policy Modeling

This blog is about how to create a project with Oracle Policy Modeling.

8620

扫码关注云+社区

领取腾讯云代金券