Qt 杂记——QTableWidget列表添加、删除(备份)
2018-06-17 23:40:49来源:未知 阅读 ()
1.列表的添加
需求:向一个有两列的Table中添加一条数据
思路:新建一个inputDialog,通过按钮打开Qt自带的inputDialog,传递回输入的数据,再添加到列表中
界面:
代码:
inputDialog.h
#ifndef INPUTDIALOG_H #define INPUTDIALOG_H #include <QDialog> namespace Ui { class InputDialog; } class InputDialog : public QDialog { Q_OBJECT public: explicit InputDialog(QWidget *parent = 0); ~InputDialog(); signals: void sendDataList(QList<QString> *inputDataList); private slots: void on_buttonBox_accepted(); private: Ui::InputDialog *ui; }; #endif // INPUTDIALOG_H
inputDialog.cpp
#include "inputdialog.h" #include "ui_inputdialog.h" InputDialog::InputDialog(QWidget *parent) : QDialog(parent), ui(new Ui::InputDialog) { ui->setupUi(this); } InputDialog::~InputDialog() { delete ui; } void InputDialog::on_buttonBox_accepted() { QList<QString> *inputDataList=new QList<QString>(); inputDataList->append(ui->KeyEdit->text()); inputDataList->append(ui->ValueEdit->text()); emit sendDataList(inputDataList); }
通过点击inputDialog上的确定按钮,将key和value的值组装成一个List,通过信号函数sendDataList()发射,等待被接收。
接下来是主界面上接收,通过点击界面上的add按钮,弹出对话框:
//初始化inputDialog inputDialog=new InputDialog(); inputDialog->setModal(true); //总在最前 connect(inputDialog,SIGNAL(sendDataList(QList<QString>*)),this,SLOT(ReceiveData(QList<QString>*)));
连接inputDialog发射的信号和主窗体的槽函数。
inputDialog->show(); inputDialog->exec(); if(inputDialog->Accepted==QDialog::Accepted){ DataUtil *dataUtil=new DataUtil(); dataUtil->AddEditedRow(ui->HardConTable,inputDataList->at(0),inputDataList->at(1)); }
如果点击ok,调用添加行的函数。
bool DataUtil::AddEditedRow(QTableWidget *table,QString key,QString value){ if(table==NULL||key==""||value=="") return false; for(int i=0;i<table->rowCount();i++){ if(key==table->item(i,0)->text()) return true; } table->insertRow(table->rowCount()); QTableWidgetItem *newItem=new QTableWidgetItem(); newItem->setText(key); table->setItem(table->rowCount()-1,0,newItem); QTableWidgetItem *newItem1=new QTableWidgetItem(); newItem1->setText(value); table->setItem(table->rowCount()-1,1,newItem1); return true; }
被添加行总是接在最后一行。
=========================分割线========================================================================================
2.列表的整行删除操作
需求:通过点击界面上的remove按钮,(表有两列)则移除选中行,支持多行选择删除。
思路历程:一开始想的是,通过QTableWidget的 selectedItems()方法返回一个List,再遍历整个列表中的内容,相同则删除。但是发现不行,因为在添加的时候每个单元格是一个item,那选择一行,selectItems()返回的是两个,而我只需要一行的数据,准确的说只需要一行的第一列的数据,通过对比第一列的数据是否相同就可以决定是否删除。(刚才反应过来了,如果遍历selectedlist的时候,每次跳一个读取就是选中行的第一列)昨天脑子不太好用)
if(table->columnCount()==2){ //两列 QList<QList<QString>*> *libsList=new QList<QList<QString>*>(); QList<QList<QString>*> *SelectedLibs=new QList<QList<QString>*>(); for(int i=0;i<table->rowCount();i++){ QList<QString> *libL=new QList<QString>(); libL->append(table->item(i,0)->text()); libL->append(table->item(i,1)->text()); libsList->append(libL); } for(int index=0;index<table->selectedItems().count();index+=2){ //加2 QList<QString> *SelectedL=new QList<QString>(); SelectedL->append(table->selectedItems().at(index)->text()); //该行第一列 SelectedL->append(table->selectedItems().at(index+1)->text());//该行第二列 SelectedLibs->append(SelectedL); } this->removeListItems(SelectedLibs,libsList); //逐行删除libsList中与SelectedLibs相同的行(只比较第一列的值) showListTable(table,libsList); //将修改过的libsList重新显示在列表中 return true; }else{ return false; }
下面是调用的两个函数:
bool DataUtil::removeListItems(QList<QList<QString> *> *SelectedLibs,QList<QList<QString> *> *AllLibsList){ if(SelectedLibs==NULL||AllLibsList==NULL) return false; for(int i=0;i<SelectedLibs->count();i++){ for(int j=0;j<AllLibsList->count();j++){ if(SelectedLibs->at(i)->at(0)==AllLibsList->at(j)->at(0)){ AllLibsList->removeAt(j); } } } return true; }
bool DataUtil::showListTable(QTableWidget *table,QList<QList<QString>* > *LibsList){ //清空 table->setRowCount(0); for( int i=0;i<LibsList->count();i++){ this->AddEditedRow(table,LibsList->at(i)->at(0),LibsList->at(i)->at(1)); } return true; }
ok,到此完毕。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++统一初始化语法(列表初始化) 2020-04-30
- Qt之股票组件-自选股--列表可以拖拽、右键常用菜单 2019-08-16
- 构造函数详解,explicit,初始化列表 2019-03-01
- 常用代码杂记 2019-02-25
- 三个单选框问题? 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash