Qt 杂记——QTableWidget列表添加、删除(备份)

  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,到此完毕。

  

时间: 2024-10-02 08:47:47

Qt 杂记——QTableWidget列表添加、删除(备份)的相关文章

python 列表的操作(添加删除)列表和元组的区别

python 列表的操作(添加删除) 1.列表的添加:append 和extend append 和extend 的区别:  append只能追加1个元素  ,extend可以追加多个 >>> lst1=[1,2,3,4] >>> lst1.append(5) >>> lst1 [1, 2, 3, 4, 5] >>> lst1.extend([6,7,8]) >>> lst1 [1, 2, 3, 4, 5, 6, 7

用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP COLUMN column_NAME 3.修改字段类型 ALTER TABLE table_name ALTER COLUMN column_name new_data_type 4.sp_rename 改名 更改当前数据库中用户创建对象(如表.列或用户定义数据类型)的名称. 语法 sp_rename

Vue,品牌列表案例(仅添加,删除,搜索,全局过滤器,私有过滤器)

Vue,品牌列表案例(仅添加,删除,搜索,全局过滤器,私有过滤器) 添加了时间过滤器(私有的) 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script src="../../js/vue.js"></script> 7 <link rel=&qu

动态添加删除网卡 - 每天5分钟玩转 OpenStack(156)

这是 OpenStack 实施经验分享系列的第 6 篇. 在项目实施过程中,经常会有添加删除网卡的需求.比如一个运行数据库的 instance,初始只有一个网卡,数据库服务和备份共用这块网卡,后来为提高性能以及合规的要求需要加一块网卡专门做备份用.长久以来,Horizon 界面只支持在部署时为 instance 配置网卡,事后添加删除网卡只能用命令行,本节就来演示这个操作. 添加网卡 我们现在有一个 instance "c1",有一块 vlan111 的网卡,IP 为 17.17.11

高仿微信对话列表滑动删除效果(转)

前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突,也许你需要了解下android中点击事件的派发流程,请参考Android源码分析-点击事件派发机制.我的解决思路是这样的:重写ListView的onInterceptTouchEvent方法,在move的时候做判断,如果是左右滑动就返回false,否则返

如何恢复,迁移,添加, 删除 Voting Disks

如何恢复,迁移,添加, 删除 Voting Disks恢复流程 在11gR2 之前,我们可以直接直接使用dd命令对voting disk进行备份.DD示例 备份votedisk盘:[[email protected] bin]# dd if=/dev/raw/raw2 of=/home/oracle/voting_disk.bak 恢复votedisk盘:[[email protected] bin]# dd if=/home/oracle/voting_disk.bak of=/dev/raw

【转】高仿微信对话列表滑动删除效果--不错

原文网址:http://blog.csdn.net/singwhatiwanna/article/details/17515543 转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17515543 前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因

Hadoop动态添加/删除节点(datanode和tacktracker)

总的来说,正确的做法是优先通过配置文件,再在具体机器上进行相应进程的启动/停止操作. 网上一些资料说在调整配置文件的时候,优先使用主机名而不是IP进行配置. 总的来说添加/删除DataNode和TaskTracker的方法非常相似,只是操作的配置项和使用的命令有微小差异. 1. DataNode 1.0 配置文件 在master/namenode下修改配置文件conf/mapred-site.xml. 关键参数dfs.hosts和dfs.hosts.exclude. 注意:不同hadoop版本的

用SQL语句添加删除修改字段

1.增加字段     alter table docdsp     add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段类型     ALTER TABLE table_name     ALTER COLUMNcolumn_name new_data_type4.sp_rename 改名     EXEC sp_rename '[dbo].[Table_1].[filedName1]