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