qt tablewidget中添加自定义的list

qt tablewidget中添加自定义的列表;
列表中包含鼠标点击事件;
tablewidget行高随列表内容变化.

在这里插入图片描述

.h文件

#ifndef lefthzyqsbgzjlqjylb_H
#define lefthzyqsbgzjlqjylb_H

#include <QWidget>
#include "chuangjianyiqi.h"
#include "mytable.h"
#include "historySubmission.h"
#include "tinyxml2.h"
using namespace tinyxml2;

namespace Ui {
class lefthzyqsbgzjlqjylb;
}

class lefthzyqsbgzjlqjylb : public QWidget
{
    Q_OBJECT

public:
    explicit lefthzyqsbgzjlqjylb(QWidget *parent = 0);
    ~lefthzyqsbgzjlqjylb();
    void refresh();
    void addRow(QString uuid="", QString taskName="", QString type="", QString equipmentName="", QString id="", QString model="", QString measurementTrace="", QString time="", QString certificateNo="", QString organization="", QString expirationDate="",  QString remark="", QString attachments="");
    QStringList getTypeList();
    QStringList getNamesOfXType(QString type);
private slots:

    void on_btn_improt_clicked();//导入execl文件
    void on_btn_downloadExeclTemplate_clicked();
    myTable *create_HangQian_YiQiSheBeiBiao();
    void on_btn_add_clicked();
    void on_btn_update_clicked();
    void on_btn_del_clicked();
    void on_btn_save_clicked();
    void on_btn_addRow_clicked();

signals:
    qieHuanRenWu(QString projectName);
private:
    Ui::lefthzyqsbgzjlqjylb *ui;
    chuangjianyiqi *yiqi;
    myTable *table;
    historySubmission *w_historySub;

    QStringList typeList;
    XMLDocument doc;
    XMLElement *root;
};

#endif // lefthzyqsbgzjlqjylb_H

.cpp文件

#include "lefthzyqsbgzjlqjylb.h"
#include "ui_lefthzyqsbgzjlqjylb.h"
#include <QGridLayout>
#include <QDebug>
#include <QVector>
#include"operatorexcel.h"
#include "common.h"
#include <QFileDialog>
#include <QAxObject>
#include <QStringList>
#include <QDateEdit>
#include <QUuid>
#include "databasectrl.h"
#include "mycombobox.h"
#include "mymessagebox.h"
lefthzyqsbgzjlqjylb::lefthzyqsbgzjlqjylb(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::lefthzyqsbgzjlqjylb)
{
    ui->setupUi(this);
    ui->btn_downloadExeclTemplate->setVisible(false);
    ui->btn_improt->setVisible(false);
    ui->btn_add->setVisible(false);
    ui->btn_update->setVisible(false);
    table = create_HangQian_YiQiSheBeiBiao();
    (new QGridLayout(ui->widget_2))->addWidget(table);
//    ui->widget_2->layout()->addWidget(table);
    yiqi=new chuangjianyiqi();
    w_historySub=new historySubmission;
    (new QGridLayout(ui->widget_historySub))->addWidget(w_historySub);
    typeList=getTypeList();
    connect(w_historySub->table->tableWidget,&QTableWidget::doubleClicked,[=](QModelIndex index)
    {
        //获得鼠标点击的x,y坐标点
//        int x = pos.x ();
//        int y = pos.y ();
//        QModelIndex index = w_historySub->table->tableWidget->indexAt (QPoint(x,y));
//        qdebug<<index.model()->data(index).toString();
        common::task=w_historySub->table->tableWidget->item(index.row(),1)->text();
        refresh();
    });
}

lefthzyqsbgzjlqjylb::~lefthzyqsbgzjlqjylb()
{
    delete ui;
}

void lefthzyqsbgzjlqjylb::refresh()
{
    emit qieHuanRenWu(common::task);
    table->tableWidget->setRowCount(0);
    QList<QStringList> submissionList=databaseCtrl::instance()->getHistorySubmission("tb_base_hz_device");
    w_historySub->table->setData(submissionList);
    if(databaseCtrl::instance()->getTaskNames().contains(common::task)==false)
    {
        return;
    }
    QStringList taskNameList;
    QStringList typeList;
    QStringList verification_institutionList;
    QString task_name=common::task;
    QList<QStringList> list=databaseCtrl::instance()->queryDevice(taskNameList, typeList,verification_institutionList,task_name,"","","","","hz");
//    table->setData(list);

    for(int i=0;i<list.size();i++)
    {
        QStringList temp=list.at(i);
        addRow(temp.at(0),temp.at(1),temp.at(2),temp.at(3),temp.at(4),temp.at(5),temp.at(6),temp.at(7),temp.at(8),temp.at(9),temp.at(10),temp.at(11),temp.at(12));
    }
    if(list.isEmpty())
    {
        QMessageBox msgBox;
        msgBox.setWindowTitle("仪器设备(工具计量器具)一览表(航中)页面提示:");
        msgBox.setText("未查询到任何信息!");
        msgBox.exec();
        return;
    }
//    table->tableWidget->horizontalHeader()->setStretchLastSection(true);//拉伸最后一列

}

void lefthzyqsbgzjlqjylb::addRow(QString uuid,QString taskName, QString type, QString equipmentName, QString id, QString model, QString measurementTrace, QString time, QString certificateNo, QString expirationDate,QString organization,  QString remark, QString attachments)
{
    //增加一行
    int row=table->tableWidget->rowCount()+1;
    int column=table->tableWidget->columnCount();
    table->tableWidget->setRowCount(row);
    if(uuid=="")
    {
        uuid=QUuid::createUuid().toString();
    }
    QTableWidgetItem *item = new QTableWidgetItem(uuid);
    item->setCheckState(Qt::Unchecked);
    table->tableWidget->setItem(row-1,0, item);

    //设置第一列为默认当前项目名称,并自动填充
    table->tableWidget->setItem(row-1,1,new QTableWidgetItem(taskName));

    //类别列表
    myComboBox *wTypeList=new myComboBox(this);
    wTypeList->setEditable(true);
    wTypeList->addItems(typeList);
    wTypeList->setCurrentText(type);
    wTypeList->setToolTip("点击编辑或下拉选择");
    table->tableWidget->setCellWidget(row-1,2,wTypeList);

    //名称列表
    myComboBox *wNameOfXTypeList=new myComboBox(this);
    wNameOfXTypeList->setEditable(true);
    wNameOfXTypeList->addItem("");
    wNameOfXTypeList->addItems(getNamesOfXType(type));
    wNameOfXTypeList->setCurrentText(equipmentName);
    wNameOfXTypeList->setToolTip("点击编辑或下拉选择");
    table->tableWidget->setCellWidget(row-1,3,wNameOfXTypeList);

    connect(wTypeList,&myComboBox::currentTextChanged,[=](QString currentType){
        wNameOfXTypeList->clear();
        wNameOfXTypeList->addItem("");
        wNameOfXTypeList->addItems(getNamesOfXType(currentType));
        wNameOfXTypeList->update();
    });
    //编号
    table->tableWidget->setItem(row-1,4,new QTableWidgetItem(id));
    //型号
    table->tableWidget->setItem(row-1,5,new QTableWidgetItem(model));
    //量值溯源方式
    myComboBox *wLiangZhiSuYuanList=new myComboBox(this);
    QStringList liangZhiSuYuanList;
    liangZhiSuYuanList<<""<<"检定"<<"校准"<<"自校"<<"比测";
    wLiangZhiSuYuanList->setEditable(true);
    wLiangZhiSuYuanList->addItems(liangZhiSuYuanList);
    wLiangZhiSuYuanList->setCurrentText(measurementTrace);
    wLiangZhiSuYuanList->setToolTip("点击编辑或下拉选择");
    table->tableWidget->setCellWidget(row-1,6,wLiangZhiSuYuanList);
    //检定/校准日期
    QDateEdit *checkDateEdit=new QDateEdit;
    checkDateEdit->setCalendarPopup(true);
    checkDateEdit->setDate(QDate::fromString(time,"yyyy-MM-dd"));
    table->tableWidget->setCellWidget(row-1,7,checkDateEdit);
    //证书编号
    table->tableWidget->setItem(row-1,8,new QTableWidgetItem(certificateNo));
    //有效期
    QDateEdit *dateEdit=new QDateEdit;
    dateEdit->setCalendarPopup(true);
    dateEdit->setDate(QDate::fromString(expirationDate,"yyyy/MM/dd"));
    table->tableWidget->setCellWidget(row-1,9,dateEdit);
    //检定/校准机构
    table->tableWidget->setItem(row-1,10,new QTableWidgetItem(organization));
    //备注
    table->tableWidget->setItem(row-1,11,new QTableWidgetItem(remark));
    //附件
    QWidget * w=new QWidget(this);
    QPushButton *btnUpload=new QPushButton(this);
    btnUpload->setText("上传");
    QVBoxLayout *vlayout=new QVBoxLayout;
    vlayout->setMargin(0);
    vlayout->setSpacing(0);
    vlayout->addWidget(btnUpload);

    QTableWidget *attachTable=new QTableWidget(0,3);
    attachTable->setObjectName("attachTable");
//    attachTable->setVisible(false);
        attachTable->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    attachTable->horizontalHeader()->hide();
    attachTable->verticalHeader()->hide();
    vlayout->addWidget(attachTable);
    w->setLayout(vlayout);
    table->tableWidget->setCellWidget(row-1,12,w);
    if(attachments!="")
    {
        QStringList attachlist=attachments.split(";",QString::SkipEmptyParts);

        for(int i=0;i<attachlist.size();i++)
        {
           qdebug<<attachlist;
            QStringList fileName_fileMd5=attachlist.at(i).split("|");
            if(fileName_fileMd5.size()<2)
            {
                continue;
            }
            QLabel *linkLabel=new QLabel;
            linkLabel->setText(fileName_fileMd5.at(0));
            linkLabel->setObjectName(fileName_fileMd5.at(1));
            QPushButton *btn_download=new QPushButton;
            btn_download->setIcon(QIcon(":/resource/下载.jpg"));
            QPushButton *btn_del=new QPushButton;
            btn_del->setIcon(QIcon(":/resource/删除.jpg"));
            int attachRow=attachTable->rowCount()+1;
            attachTable->setRowCount(attachRow);
            attachTable->setCellWidget(attachRow-1,0,btn_download);
            attachTable->setCellWidget(attachRow-1,1,btn_del);
            attachTable->setCellWidget(attachRow-1,2,linkLabel);
            connect(btn_download,QPushButton::clicked,[=]()
            {
                QPoint point=attachTable->mapFromGlobal(QCursor::pos());
                QModelIndex index = attachTable->indexAt (QPoint(point.x(),point.y()));
                QLabel *label=static_cast<QLabel*>(attachTable->cellWidget(index.row(),2));
                qdebug<<index.row()<<index.column()<<label->text();

            });
            connect(btn_del,QPushButton::clicked,[=]()
            {
                QPoint point=attachTable->mapFromGlobal(QCursor::pos());
                QModelIndex index = attachTable->indexAt (QPoint(point.x(),point.y()));
                qdebug<<index.row()<<index.column();
                attachTable->removeRow(index.row());
            });
        }
        attachTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行高
        attachTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行高
    }
    connect(btnUpload,&QPushButton::clicked,[=]()
    {
        int HHeaderHeight = table->tableWidget->horizontalHeader()->height();
        int VHeaderWidth = table->tableWidget->verticalHeader()->width();
        QPoint ppt=table->tableWidget->mapFromGlobal(QCursor::pos());
        QModelIndex index = table->tableWidget->indexAt (QPoint(ppt.x()-VHeaderWidth,ppt.y()-HHeaderHeight));//神奇!!
        if(index.isValid()==true)
        {
            table->tableWidget->setCurrentCell(index.row(),index.column());
            QObjectList objlist=table->tableWidget->cellWidget(index.row(),index.column())->children();
            for(int i=0;i<objlist.size();i++)
            {
                if(objlist.at(i)->objectName()=="attachTable")
                {
                    QTableWidget* attachTableObj= static_cast<QTableWidget*>(objlist.at(i));
                    for(int i=0;i<attachTableObj->rowCount();i++)
                    {
                        qdebug<<static_cast<QLabel*>(attachTableObj->cellWidget(i,2))->objectName();
                    }
                }
            }
        }
        else
        {
            qdebug<<"index is not Valid";
        }

        QStringList filePathList = QFileDialog::getOpenFileNames(this,
                                                                 "选择需要上传的附件文件", "../", "*");
        if(filePathList.isEmpty())
        {
            return;
        }
        else
        {
//            attachTable->setVisible(true);
            for(int i=0;i<filePathList.size();i++)
            {
                QFileInfo fileInfo=QFileInfo(filePathList.at(i));
                bool copyResult=common::copyFileToPath(fileInfo.absoluteFilePath(),QApplication::applicationDirPath() + "/attachments/"+common::getFileMd5(fileInfo.absoluteFilePath()));
                if(copyResult==true)
                {
                    QLabel *linkLabel=new QLabel;
                    linkLabel->setText(fileInfo.fileName());
                    linkLabel->setObjectName(common::getFileMd5(fileInfo.absoluteFilePath()));
                    QPushButton *btn_download=new QPushButton;
                    btn_download->setIcon(QIcon(":/resource/下载.jpg"));
                    QPushButton *btn_del=new QPushButton;
                    btn_del->setIcon(QIcon(":/resource/删除.jpg"));
                    int attachRow=attachTable->rowCount()+1;
                    attachTable->setRowCount(attachRow);
                    attachTable->setCellWidget(attachRow-1,0,btn_download);
                    attachTable->setCellWidget(attachRow-1,1,btn_del);
                    attachTable->setCellWidget(attachRow-1,2,linkLabel);
                    connect(btn_download,QPushButton::clicked,[=]()
                    {
                        QPoint point=attachTable->mapFromGlobal(QCursor::pos());
                        QModelIndex index = attachTable->indexAt (QPoint(point.x(),point.y()));
                        QLabel *label=static_cast<QLabel*>(attachTable->cellWidget(index.row(),2));
                        qdebug<<index.row()<<index.column()<<label->text();
                        common::downLoadFileFromSomeDir(this,QApplication::applicationDirPath() +"/attachments",label->objectName(),label->text());

                    });
                    connect(btn_del,QPushButton::clicked,[=]()
                    {
                        QPoint point=attachTable->mapFromGlobal(QCursor::pos());
                        QModelIndex index = attachTable->indexAt (QPoint(point.x(),point.y()));
                        qdebug<<index.row()<<index.column();
                        attachTable->removeRow(index.row());

                    });
                    attachTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行高
                    attachTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行高
                }
            }
        }
        int attachmentHeight =attachTable->rowCount()*25+30;
        if(table->tableWidget->rowHeight(table->tableWidget->currentRow())<attachmentHeight)
        {
            table->tableWidget->setRowHeight(table->tableWidget->currentRow(),attachmentHeight);
        }
    });
}

QStringList lefthzyqsbgzjlqjylb::getTypeList()
{
    if(!doc.LoadFile(QString(QApplication::applicationDirPath() + "/config/oceanDevices.xml").toUtf8().data()));
    {
        doc.PrintError();
    }
    root=doc.RootElement();
    XMLElement *tempnode=root->FirstChild()->ToElement();
    while(tempnode!=NULL)
    {
        typeList<<tempnode->Attribute("typeName");
        tempnode=tempnode->NextSiblingElement();//获取同级别的下一个兄弟元素
    }
    return typeList;
}

QStringList lefthzyqsbgzjlqjylb::getNamesOfXType(QString type)
{
    XMLElement *tempnode=root->FirstChild()->ToElement();
    QStringList devicesOfTypeXList;
    while(tempnode!=NULL)
    {
        if(tempnode->Attribute("typeName")==type)
        {
            XMLElement *nameElement=tempnode->FirstChildElement();
            while(nameElement!=NULL)
            {
                devicesOfTypeXList<<nameElement->GetText();
                nameElement=nameElement->NextSiblingElement();
            }
            break;
        }
        tempnode=tempnode->NextSiblingElement();//获取同级别的下一个兄弟元素
    }
    return devicesOfTypeXList;

}


void lefthzyqsbgzjlqjylb::on_btn_improt_clicked()
{

    QString path = QFileDialog::getOpenFileName(this,
                    "选择需要导入的Execl文件", "../", "Execl(*.xlsx)");
    if(path.isEmpty())
    {
        return;
    }
    OperatorExcel myExecl;
    QVector<DatasetDevice> data;
    QList<QStringList> yiqiList;
    myExecl.readExcelVoyageEquipment(path,data,0,2);
    for(int i=0;i<data.size();i++)
    {
        if(data.at(i).task.isEmpty())
        {
            continue;
        }
        QStringList l;
        //类别	仪器(标准物质)名称	编号	型号	量值溯源方式	检定/校准日期	证书编号	有效期	检定/校准机构	备注
        l.push_back(data.at(i).task);
        l.push_back(data.at(i).type);
        l.push_back(data.at(i).equipmentName);
        l.push_back(data.at(i).id);
        l.push_back(data.at(i).model);
        l.push_back(data.at(i).measurementTrace);
        l.push_back(data.at(i).time);
        l.push_back(data.at(i).certificateNo);
        l.push_back(data.at(i).expirationDate);
        l.push_back(data.at(i).organization);
        l.push_back(data.at(i).remark);
        yiqiList.append(l);

        tb_base_device device;
        device.type=data.at(i).type;  //类别
        device.name=data.at(i).equipmentName;//名称
        device.id =data.at(i).id;//编号
        device.model=data.at(i).model;//型号
        device.traceability=data.at(i).measurementTrace;//量值溯源方式
        device.checkdate=QDate::fromString(data.at(i).time,"yyyy-MM-dd");//校准日期
        device.certificate_number=data.at(i).certificateNo;//证书编号
        device.validity=data.at(i).expirationDate;  //有效期
        device.verification_institutions=data.at(i).organization;//校准机构
        device.remark=data.at(i).remark;   //备注
        databaseCtrl::instance()->addDevice(device,"hz");
    }
    table->setData(yiqiList);

}

void lefthzyqsbgzjlqjylb::on_btn_downloadExeclTemplate_clicked()
{
    QString fileName="航次仪器设备(工作计量器具)一览表.xlsx";
    common::downLoadExcelTemplate(this,fileName);
}

myTable *lefthzyqsbgzjlqjylb::create_HangQian_YiQiSheBeiBiao()
{
    QStringList header;
    header<<"航次任务名称"<<"类别"<<"仪器(标准物质)名称"<<"编号"<<"型号"<<"量值溯源方式"<<"检定/校准日期"<<"证书编号"<<"有效期"<<"检定/校准机构"<<"备注"<<"附件";
    myTable *table=new myTable(0,header.size());
    table->setHHeader(header);
    table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
//        table->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应文本,自动调整列宽,数据多时界面卡
//    table->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应文本,自动调整行高,数据多时界面卡
//    table->setMinimumWidth(1200);
//        table->setFixedWidth(1200);
    QList<int> list;
    list<<25<<153<<152<<190<<60<<60<<100<<105<<73<<106<<145<<64<<112;
    table->setColumnsWidth(list,table->tableWidget);
    return table;
}

void lefthzyqsbgzjlqjylb::on_btn_add_clicked()
{
    if(databaseCtrl::instance()->getTaskNames().contains(common::task)==false)
    {
        QMessageBox msgBox;
        msgBox.setText("请切换到相应任务!");
        msgBox.exec();
        return;
    }
    chuangjianyiqi *w_yiqi=new chuangjianyiqi();
    w_yiqi->setWindowModality(Qt::ApplicationModal);
    w_yiqi->show();
    w_yiqi->raise();
    connect(w_yiqi,&chuangjianyiqi::addDevice,[&](tb_base_device new_device){
        QStringList list;
        list.append(common::task);
        list.append(new_device.type);
        list.append(new_device.name);
        list.append(new_device.id);
        list.append(new_device.model);
        list.append(new_device.traceability);
        list.append(new_device.checkdate.toString());
        list.append(new_device.certificate_number);
        list.append(new_device.validity);
        list.append(new_device.verification_institutions);
        list.append(new_device.remark);

        bool result =databaseCtrl::instance()->addDevice(new_device,"hz");

        if(result)
        {
            table->addRow(list);
            QMessageBox msgBox;
            msgBox.setText("仪器设备(工作计量器具)信息添加成功!");
            msgBox.exec();
        }
        else
        {
            QMessageBox msgBox;
            msgBox.setText("仪器设备(工作计量器具)信息添加失败!");
            msgBox.exec();
        }
    });
}

void lefthzyqsbgzjlqjylb::on_btn_update_clicked()
{
    int row=table->tableWidget->currentRow();
    if(row<0)
    {
        QMessageBox msgBox;
        msgBox.setText("请先点击选中需要修改的行!");
        msgBox.exec();
        return;
    }
    tb_base_device old_device;
    old_device.type=table->tableWidget->item(row,2)->text();
    old_device.name=table->tableWidget->item(row,3)->text();
    old_device.id=table->tableWidget->item(row,4)->text();
    old_device.model=table->tableWidget->item(row,5)->text();
    old_device.traceability=table->tableWidget->item(row,6)->text();
    old_device.checkdate=QDate::fromString(table->tableWidget->item(row,7)->text());
    old_device.certificate_number=table->tableWidget->item(row,8)->text();
    old_device.validity=table->tableWidget->item(row,9)->text();
    old_device.verification_institutions=table->tableWidget->item(row,10)->text();
    old_device.remark=table->tableWidget->item(row,11)->text();
    chuangjianyiqi *w_yiqi=new chuangjianyiqi();
    w_yiqi->updateDevice(old_device);
    w_yiqi->setWindowModality(Qt::ApplicationModal);
    w_yiqi->show();
    w_yiqi->raise();
    connect(w_yiqi,&chuangjianyiqi::addDevice,[=](tb_base_device new_device){
        QStringList list;
        list.append(new_device.type);
        list.append(new_device.name);
        list.append(new_device.id);
        list.append(new_device.model);
        list.append(new_device.traceability);
        list.append(new_device.checkdate.toString("yyyy-MM-dd"));
        list.append(new_device.certificate_number);
        list.append(new_device.validity);
        list.append(new_device.verification_institutions);
        list.append(new_device.remark);
        QString oldUniqueId=QString("%1_%2_%3_%4").arg(common::task).arg(old_device.type).arg(old_device.name).arg(old_device.id);
        int result =databaseCtrl::instance()->updateDevice(oldUniqueId,new_device,"hz");
        if(result)
        {
            table->tableWidget->setItem(row,1 ,new QTableWidgetItem(common::task));
            table->tableWidget->setItem(row,2 ,new QTableWidgetItem(new_device.type));
            table->tableWidget->setItem(row,3 ,new QTableWidgetItem(new_device.name));
            table->tableWidget->setItem(row,4 ,new QTableWidgetItem(new_device.id));
            table->tableWidget->setItem(row,5 ,new QTableWidgetItem(new_device.model));
            table->tableWidget->setItem(row,6 ,new QTableWidgetItem(new_device.traceability));
            table->tableWidget->setItem(row,7 ,new QTableWidgetItem(new_device.checkdate.toString("yyyy-MM-dd")));
            table->tableWidget->setItem(row,8 ,new QTableWidgetItem(new_device.certificate_number));
            table->tableWidget->setItem(row,9 ,new QTableWidgetItem(new_device.validity));
            table->tableWidget->setItem(row,10,new QTableWidgetItem(new_device.verification_institutions));
            table->tableWidget->setItem(row,11,new QTableWidgetItem(new_device.remark));
            QMessageBox msgBox;
            msgBox.setText("仪器设备(工作计量器具)信息修改成功!");
            msgBox.exec();
        }
        else
        {
            QMessageBox msgBox;
            msgBox.setText("仪器设备(工作计量器具)信息修改失败!");
            msgBox.exec();
        }
    });
}

void lefthzyqsbgzjlqjylb::on_btn_del_clicked()
{
    QList<int> list=table->getSelectedRow();
    if(list.isEmpty())
    {
        QMessageBox::information(this, QString("提示"),QString("请勾选后点击删除!"),QMessageBox::Yes);
        return;
    }
    QString delList;
    QStringList uniqueIdList;
    for(int i=0;i<list.size();i++)
    {
        QString type=static_cast<myComboBox*>(table->tableWidget->cellWidget(list.at(i),2))->currentText();//从第一行往下获取
        QString name=static_cast<myComboBox*>(table->tableWidget->cellWidget(list.at(i),3))->currentText();//从第一行往下获取
        QString id=table->tableWidget->item(list.at(i),4)->text();//从第一行往下获取
        delList.append(type).append("-").append(name).append("-").append(id).append("\n");
        if(table->tableWidget->item(list.at(i),0)!=NULL)
        {
            uniqueIdList.append(table->tableWidget->item(list.at(i),0)->text());
        }
    }
    int ret = QMessageBox::warning(this, QString("提示"),QString("确定要删除:\n%1?").arg(delList),QMessageBox::Yes,QMessageBox::Cancel);
    if(ret==QMessageBox::Yes)
    {

        for(int i=0;i<uniqueIdList.size();i++)
        {
//            databaseCtrl::instance()->delDevice(uniqueIdList.at(i),"hq");
            databaseCtrl::instance()->delDevice(uniqueIdList.at(i),"hz");
        }
        table->myremoveRow(list);
    }
}


void lefthzyqsbgzjlqjylb::on_btn_save_clicked()
{
    if(databaseCtrl::instance()->getTaskNames().contains(common::task)==false)
    {
        return;
    }
    for(int i=0;i<(table->tableWidget->rowCount());i++)
    {
        tb_base_device device;
        device.uuid=table->tableWidget->item(i,0)->text();
        device.task=table->tableWidget->item(i,1)->text();
        device.type=static_cast<myComboBox*>(table->tableWidget->cellWidget(i,2))->currentText();
        device.name=static_cast<myComboBox*>(table->tableWidget->cellWidget(i,3))->currentText();
        device.id=table->tableWidget->item(i,4)->text();
        device.model=table->tableWidget->item(i,5)->text();
        device.traceability=static_cast<myComboBox*>(table->tableWidget->cellWidget(i,6))->currentText();
        device.checkdate=static_cast<QDateEdit*>(table->tableWidget->cellWidget(i,7))->date();
        device.certificate_number=table->tableWidget->item(i,8)->text();
        device.validity=static_cast<QDateEdit*>(table->tableWidget->cellWidget(i,9))->date().toString("yyyy/MM/dd");
        device.verification_institutions=table->tableWidget->item(i,10)->text();
        device.remark=table->tableWidget->item(i,11)->text();
        QObjectList objlist=table->tableWidget->cellWidget(i,12)->children();
        QString attachmentListStr;
        for(int i=0;i<objlist.size();i++)
        {
            if(objlist.at(i)->objectName()=="attachTable")
            {
                QTableWidget* attachTableObj= static_cast<QTableWidget*>(objlist.at(i));
                for(int i=0;i<attachTableObj->rowCount();i++)
                {
                    QLabel *temp=static_cast<QLabel*>(attachTableObj->cellWidget(i,2));
                    QString fileName_FileMd5=QString("%1|%2").arg(temp->text()).arg(temp->objectName());
                    attachmentListStr.append(fileName_FileMd5).append(";");
                }
            }
        }
        device.attachments=attachmentListStr;
//        databaseCtrl::instance()->addDevice(device,"hq");
        databaseCtrl::instance()->addDevice(device,"hz");
    }
}

void lefthzyqsbgzjlqjylb::on_btn_addRow_clicked()
{
    //判断当前项目是否为空
    if(databaseCtrl::instance()->getTaskNames().contains(common::task)==false)
    {
        QMessageBox msgBox;
        msgBox.setWindowTitle("航次仪器设备(工作计量器具)一览表页面提示:");
        msgBox.setText("当前任务为空,请选择任务后再进行填写!");
        msgBox.exec();
        return;
    }
    addRow("",common::task);
    table->tableWidget->scrollToBottom();
    QList<int> lst=table->getColumnsWidths();
    table->setColumnsWidth(lst,table->tableWidget);
}

.ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>lefthzyqsbgzjlqjylb</class>
 <widget class="QWidget" name="lefthzyqsbgzjlqjylb">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>1114</width>
    <height>740</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QGridLayout" name="gridLayout_2">
   <property name="leftMargin">
    <number>0</number>
   </property>
   <property name="topMargin">
    <number>0</number>
   </property>
   <property name="rightMargin">
    <number>0</number>
   </property>
   <property name="bottomMargin">
    <number>0</number>
   </property>
   <property name="spacing">
    <number>0</number>
   </property>
   <item row="0" column="0">
    <widget class="QLabel" name="label">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
     <property name="font">
      <font>
       <family>Times New Roman</family>
       <pointsize>15</pointsize>
       <weight>75</weight>
       <bold>true</bold>
      </font>
     </property>
     <property name="text">
      <string>仪器设备(工作计量器具)一览表(航中)</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignCenter</set>
     </property>
    </widget>
   </item>
   <item row="2" column="0">
    <widget class="QWidget" name="widget_2" native="true">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
    </widget>
   </item>
   <item row="1" column="0">
    <widget class="QWidget" name="widget" native="true">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="1">
       <widget class="QPushButton" name="btn_improt">
        <property name="text">
         <string>导入Execl文件</string>
        </property>
       </widget>
      </item>
      <item row="0" column="0">
       <widget class="QPushButton" name="btn_downloadExeclTemplate">
        <property name="text">
         <string>下载Execl模板</string>
        </property>
       </widget>
      </item>
      <item row="0" column="5">
       <widget class="QPushButton" name="btn_update">
        <property name="text">
         <string>修改</string>
        </property>
       </widget>
      </item>
      <item row="0" column="4">
       <widget class="QPushButton" name="btn_add">
        <property name="text">
         <string>新建</string>
        </property>
       </widget>
      </item>
      <item row="0" column="6">
       <widget class="QPushButton" name="btn_del">
        <property name="text">
         <string>删除</string>
        </property>
       </widget>
      </item>
      <item row="0" column="2">
       <spacer name="horizontalSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
          <width>648</width>
          <height>20</height>
         </size>
        </property>
       </spacer>
      </item>
      <item row="0" column="3">
       <widget class="QPushButton" name="btn_addRow">
        <property name="text">
         <string>新增行</string>
        </property>
       </widget>
      </item>
      <item row="0" column="7">
       <widget class="QPushButton" name="btn_save">
        <property name="text">
         <string>保存</string>
        </property>
       </widget>
      </item>
     </layout>
    </widget>
   </item>
   <item row="0" column="1" rowspan="3">
    <widget class="QWidget" name="widget_historySub" native="true">
     <property name="minimumSize">
      <size>
       <width>10</width>
       <height>0</height>
      </size>
     </property>
     <property name="maximumSize">
      <size>
       <width>200</width>
       <height>16777215</height>
      </size>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

ui.h文件

/********************************************************************************
** Form generated from reading UI file 'lefthzyqsbgzjlqjylb.ui'
**
** Created by: Qt User Interface Compiler version 5.9.4
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_LEFTHZYQSBGZJLQJYLB_H
#define UI_LEFTHZYQSBGZJLQJYLB_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_lefthzyqsbgzjlqjylb
{
public:
    QGridLayout *gridLayout_2;
    QLabel *label;
    QWidget *widget_2;
    QWidget *widget;
    QGridLayout *gridLayout;
    QPushButton *btn_improt;
    QPushButton *btn_downloadExeclTemplate;
    QPushButton *btn_update;
    QPushButton *btn_add;
    QPushButton *btn_del;
    QSpacerItem *horizontalSpacer;
    QPushButton *btn_addRow;
    QPushButton *btn_save;
    QWidget *widget_historySub;

    void setupUi(QWidget *lefthzyqsbgzjlqjylb)
    {
        if (lefthzyqsbgzjlqjylb->objectName().isEmpty())
            lefthzyqsbgzjlqjylb->setObjectName(QStringLiteral("lefthzyqsbgzjlqjylb"));
        lefthzyqsbgzjlqjylb->resize(1114, 740);
        QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(lefthzyqsbgzjlqjylb->sizePolicy().hasHeightForWidth());
        lefthzyqsbgzjlqjylb->setSizePolicy(sizePolicy);
        gridLayout_2 = new QGridLayout(lefthzyqsbgzjlqjylb);
        gridLayout_2->setSpacing(0);
        gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
        gridLayout_2->setContentsMargins(0, 0, 0, 0);
        label = new QLabel(lefthzyqsbgzjlqjylb);
        label->setObjectName(QStringLiteral("label"));
        QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Minimum);
        sizePolicy1.setHorizontalStretch(0);
        sizePolicy1.setVerticalStretch(0);
        sizePolicy1.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
        label->setSizePolicy(sizePolicy1);
        QFont font;
        font.setFamily(QStringLiteral("Times New Roman"));
        font.setPointSize(15);
        font.setBold(true);
        font.setWeight(75);
        label->setFont(font);
        label->setAlignment(Qt::AlignCenter);

        gridLayout_2->addWidget(label, 0, 0, 1, 1);

        widget_2 = new QWidget(lefthzyqsbgzjlqjylb);
        widget_2->setObjectName(QStringLiteral("widget_2"));
        QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Expanding);
        sizePolicy2.setHorizontalStretch(0);
        sizePolicy2.setVerticalStretch(0);
        sizePolicy2.setHeightForWidth(widget_2->sizePolicy().hasHeightForWidth());
        widget_2->setSizePolicy(sizePolicy2);

        gridLayout_2->addWidget(widget_2, 2, 0, 1, 1);

        widget = new QWidget(lefthzyqsbgzjlqjylb);
        widget->setObjectName(QStringLiteral("widget"));
        sizePolicy1.setHeightForWidth(widget->sizePolicy().hasHeightForWidth());
        widget->setSizePolicy(sizePolicy1);
        gridLayout = new QGridLayout(widget);
        gridLayout->setObjectName(QStringLiteral("gridLayout"));
        btn_improt = new QPushButton(widget);
        btn_improt->setObjectName(QStringLiteral("btn_improt"));

        gridLayout->addWidget(btn_improt, 0, 1, 1, 1);

        btn_downloadExeclTemplate = new QPushButton(widget);
        btn_downloadExeclTemplate->setObjectName(QStringLiteral("btn_downloadExeclTemplate"));

        gridLayout->addWidget(btn_downloadExeclTemplate, 0, 0, 1, 1);

        btn_update = new QPushButton(widget);
        btn_update->setObjectName(QStringLiteral("btn_update"));

        gridLayout->addWidget(btn_update, 0, 5, 1, 1);

        btn_add = new QPushButton(widget);
        btn_add->setObjectName(QStringLiteral("btn_add"));

        gridLayout->addWidget(btn_add, 0, 4, 1, 1);

        btn_del = new QPushButton(widget);
        btn_del->setObjectName(QStringLiteral("btn_del"));

        gridLayout->addWidget(btn_del, 0, 6, 1, 1);

        horizontalSpacer = new QSpacerItem(648, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout->addItem(horizontalSpacer, 0, 2, 1, 1);

        btn_addRow = new QPushButton(widget);
        btn_addRow->setObjectName(QStringLiteral("btn_addRow"));

        gridLayout->addWidget(btn_addRow, 0, 3, 1, 1);

        btn_save = new QPushButton(widget);
        btn_save->setObjectName(QStringLiteral("btn_save"));

        gridLayout->addWidget(btn_save, 0, 7, 1, 1);


        gridLayout_2->addWidget(widget, 1, 0, 1, 1);

        widget_historySub = new QWidget(lefthzyqsbgzjlqjylb);
        widget_historySub->setObjectName(QStringLiteral("widget_historySub"));
        widget_historySub->setMinimumSize(QSize(10, 0));
        widget_historySub->setMaximumSize(QSize(200, 16777215));

        gridLayout_2->addWidget(widget_historySub, 0, 1, 3, 1);


        retranslateUi(lefthzyqsbgzjlqjylb);

        QMetaObject::connectSlotsByName(lefthzyqsbgzjlqjylb);
    } // setupUi

    void retranslateUi(QWidget *lefthzyqsbgzjlqjylb)
    {
        lefthzyqsbgzjlqjylb->setWindowTitle(QApplication::translate("lefthzyqsbgzjlqjylb", "Form", Q_NULLPTR));
        label->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\344\273\252\345\231\250\350\256\276\345\244\207\357\274\210\345\267\245\344\275\234\350\256\241\351\207\217\345\231\250\345\205\267\357\274\211\344\270\200\350\247\210\350\241\250(\350\210\252\344\270\255)", Q_NULLPTR));
        btn_improt->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\345\257\274\345\205\245Execl\346\226\207\344\273\266", Q_NULLPTR));
        btn_downloadExeclTemplate->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\344\270\213\350\275\275Execl\346\250\241\346\235\277", Q_NULLPTR));
        btn_update->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\344\277\256\346\224\271", Q_NULLPTR));
        btn_add->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\346\226\260\345\273\272", Q_NULLPTR));
        btn_del->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\345\210\240\351\231\244", Q_NULLPTR));
        btn_addRow->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\346\226\260\345\242\236\350\241\214", Q_NULLPTR));
        btn_save->setText(QApplication::translate("lefthzyqsbgzjlqjylb", "\344\277\235\345\255\230", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class lefthzyqsbgzjlqjylb: public Ui_lefthzyqsbgzjlqjylb {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_LEFTHZYQSBGZJLQJYLB_H

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
QtTableWidget添加下拉框可以通过以下步骤实现: 1. 创建一个TableWidget对象,可以通过Qt Designer或编程方式创建。 2. 使用setRowCount()和setColumnCount()方法设置TableWidget的行数和列数。 3. 使用setCellWidget()方法将下拉框添加到指定的单元格。该方法的参数是要添加的下拉框对象以及要放置下拉框的单元格的行和列索引。 4. 通过QComboBox类创建一个下拉框对象,并设置下拉框的选项。 5. 使用addItem()方法向下拉框添加选项,可以循环调用该方法来添加多个选项。 6. 使用setStyleSheet()方法设置下拉框的样式,比如设置边框颜色、背景颜色等。 7. 为下拉框添加信号槽连接,以便在选择某个选项时执行相应的操作。 8. 编写槽函数来处理下拉框选项的选择事件,可以使用currentIndexChanged()信号来捕获选项的改变事件。 9. 最后,使用show()方法显示TableWidget。 下面是一个示例代码: ``` #include <QApplication> #include <QTableWidget> #include <QComboBox> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTableWidget tableWidget; tableWidget.setRowCount(3); tableWidget.setColumnCount(2); for (int row = 0; row < 3; ++row) { for (int column = 0; column < 2; ++column) { QComboBox* comboBox = new QComboBox; comboBox->addItem("Option 1"); comboBox->addItem("Option 2"); comboBox->addItem("Option 3"); tableWidget.setCellWidget(row, column, comboBox); QObject::connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index) { qDebug() << "Selected option:" << comboBox->currentText(); }); } } tableWidget.show(); return a.exec(); } ``` 运行上述代码,将会显示一个包含下拉框的TableWidget,你可以选择下拉框的选项,并在控制台输出选项内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值