前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt学习笔记 ListWidget的增删改

Qt学习笔记 ListWidget的增删改

作者头像
lpxxn
发布2018-01-31 13:16:40
1.1K0
发布2018-01-31 13:16:40
举报
文章被收录于专栏:技术之路

学习了一下ListWidget控件的使用,做一个小功能增删改

先把代码分解最后给出完整代码

在窗体上添加一个ListWidget 一个Horizontal Specer和  三个PushButton

效果如下

因为构造函数中的SetupUi(this)会自动将符合on_objectName_signalName()命名

的任意槽与相应的objectName的signalName()信号连接到一起

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

代码语言:javascript
复制
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控件添加一些元素

代码语言:javascript
复制
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事件

代码语言:javascript
复制
void on_lvWid_Source_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);

在这里我们把选中行的字体变为蓝色行背景变为红色

在.cpp里实现 

代码语言:javascript
复制
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实现

代码语言:javascript
复制
void MyElementsView::on_btn_AddEvent_clicked()
{
    ui->lvWid_Source->addItem(tr("new item : ") +QString::number(ui->lvWid_Source->count()));
}

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

删除有些麻烦

代码语言:javascript
复制
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取出来再进行删除

修改实现也比较简单

代码语言:javascript
复制
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

代码语言:javascript
复制
#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完整代码

代码语言:javascript
复制
#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);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-04-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档