zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    字典树入门
    Cyclic Nacklace HDU 3746 KMP 循环节
    KMP字符串匹配 模板 洛谷 P3375
    Phone List POJ-3630 字典树 or 暴力
    stringstream istringstream ostringstream 三者的区别
    单词数 HDU 2072 字符串输入控制
    逆序单词 HIhoCoder 1366 字典树
    input框中修改placeholder的样式
    如何使用$.each()与$().each()以及他们的区别
    css解决input的阴影
  • 原文地址:https://www.cnblogs.com/li-peng/p/3651945.html
Copyright © 2011-2022 走看看