QListWidget基本使用
Qt提供了QListWidget类,是一种常见的界面组织数据的形式,在开发桌面应用中常常会用到,下面用一个小程序说明QListWidget的基本使用。
小场景
在Qt设计师界面中拖入一个ListWidget,并利用GUI工具添加默认项和其对应的图标。设计“add”按钮以实现添加项的功能,设计“delete”按钮以实现删除项的功能,设计“deleteAll”按钮以实现删除全部项的功能,添加“显示目录”按钮将当前目录中的文件名字添加进listwidget。加入对lineedit的回车响应,使之实现添加功能,加入item的单击事件响应,使之打印item的文本。程序编写完毕,执行效果正确,代码粘贴如下。
代码
ui界面
main文件保持不变
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QListWidget>
#include <QListWidgetItem>
#include <QDir>
#include <QStringList>
#include <QMessageBox>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void doProcessAddItem();
void doProcessClickItem(QListWidgetItem *);
void on_deleteBtn_clicked();
void on_deleteAllBtn_clicked();
void on_showDirBtn_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->listWidget->setViewMode(QListWidget::IconMode);//设置为图标显示方式
connect(ui->addBtn,SIGNAL(clicked()),this,SLOT(doProcessAddItem()));
connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(doProcessAddItem()));//回车信号
connect(ui->listWidget,SIGNAL(itemClicked(QListWidgetItem *)),this,SLOT(doProcessClickItem(QListWidgetItem *)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::doProcessAddItem()
{
//按回车健或者单击add按钮均会添加Item
QString str = ui->lineEdit->text();
if(str.isEmpty()){
qApp->beep();
return;
}
QListWidgetItem *myItem = new QListWidgetItem;
myItem->setText(str);//设置项的文本
ui->listWidget->addItem(myItem);//添加项
ui->lineEdit->clear();
}
void Widget::doProcessClickItem(QListWidgetItem * item)
{
qDebug()<<"??"<<item->text();
}
void Widget::on_deleteBtn_clicked()
{
//takeItem返回第n个item currentRow获得当前所在行
QListWidgetItem *delItem = ui->listWidget->takeItem(ui->listWidget->currentRow());
delete delItem;//执行删除项操作
}
void Widget::on_deleteAllBtn_clicked()
{
int count = ui->listWidget->count();
for (int i = 0;i<count;i++ ) {
QListWidgetItem *delItem = ui->listWidget->takeItem(0);
delete delItem;//执行删除项操作
}
}
void Widget::on_showDirBtn_clicked()
{
ui->listWidget->clear();
QDir myDir= QDir::current();//获取当前工程目录
QStringList list = myDir.entryList();//获取目录中文件名字
if(list.size()==0){
QMessageBox::information(this,"错误提示","目录为空");
return;
}
else{
for (int i = 0;i<list.size() ;i++ ) {//循环添加当前目录中文件名
if(list.at(i)=="."||list.at(i)==".."){
continue;
}
QListWidgetItem *myItem = new QListWidgetItem;
myItem->setText(list.at(i));
ui->listWidget->addItem(myItem);
}
}
}