QTreeview之setData绑定一个对话框

本文介绍了如何在QTreeview中通过setData方法绑定一个对话框,以解决点击不同节点时弹出相应对话框的问题。文章提供了解决思路和示例代码,通过在点击节点时检查setData设置的角色来避免重复弹出对话框。

QTreeview之setData绑定一个对话框

一、描述

问题描述:点击QTreeview节点实现弹出一个对话框,由于每点击一个节点都要弹出一个对话框,所以把对话框定义成类的成员函数肯定是不行的。但是在多次点击同一个叶子节点时会弹出多个对话框,这又不满足需求啦。

二、思路

解决思路:要满足要求有两种思路,第一种是把treview节点和对应的对话框指针保存到一个容器中,每次点击时先查看容器中是否保存了该节点对应的窗口指针,这种方法应该是可行的,但是比较麻烦点;第二种就是使用setData设置角色,我采用的就是第二种方法实现的。

三、示例代码

示例代码如下:

connect(m_tree, SIGNAL(clicked(const QModelIndex)), this, SLOT(dealShowCheckDlg(const QModelIndex)));
void MainWindow::dealShowCheckDlg(const QModelIndex &index)
{
	QStandardItem *pItem = m_model->itemFromIndex(index);
	QString indexData = "";
	int row = -1;
	QString xmlFileName = "";
	if (!index.parent().data().toString().isEmpty())
	{
		indexData = index.data().toString();
		row = index.row();
		xmlFileName = m_checkSrcList.at(row);
	}
	ProductConfigDlg *dlg = NULL;
	QVariant tempDlgVar = pItem->data(Qt::UserRole + row + 1);
	if (!tempDlgVar.isNull())
	{
		dlg = tempDlgVar.value<ProductConfigDlg*>
#include "mainwindow.h" #include "ui_mainwindow.h" #include "adddialog.h" #include <QMenu> #include <QAction> #include <QCursor> #include <QMessageBox> #include <QPushButton> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) , dataManager(DataManager::getInstance()) { ui->setupUi(this); initTreeWidget(); initTableWidget(); connect(ui->addpushButton,SIGNAL(clicked()),this,SLOT(addButtonClicked())); //connect(ui->deletepushButton, SIGNAL(clicked()), this, SLOT(deleteButtonClicked())); connect(ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(onTreeItemClicked(QTreeWidgetItem*, int))); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initTreeWidget() { ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)), this,SLOT(ContextMenuRequested(QPoint))); ui->treeWidget->setHeaderLabel("学生管理系统"); QTreeWidgetItem *uitem=new QTreeWidgetItem(); uitem->setText(0,"北京大学"); uitem->setData(0, Qt::UserRole, 0); ui->treeWidget->addTopLevelItem(uitem); QTreeWidgetItem *citem=new QTreeWidgetItem(); citem->setText(0,"计算机学院"); citem->setData(0, Qt::UserRole, 1); uitem->addChild(citem); QTreeWidgetItem *titem=new QTreeWidgetItem(); titem->setText(0,"老师"); titem->setData(0, Qt::UserRole, 2); citem->addChild(titem); QTreeWidgetItem *sitem=new QTreeWidgetItem(); sitem->setText(0,"学生"); sitem->setData(0, Qt::UserRole, 3); citem->addChild(sitem); QTreeWidgetItem *titem1=new QTreeWidgetItem(); titem1->setText(0,"闻清砚"); titem1->setData(0, Qt::UserRole, 4); titem->addChild(titem1); QTreeWidgetItem *sitem1=new QTreeWidgetItem(); sitem1->setText(0,"司南钰"); sitem1->setData(0, Qt::UserRole, 5); sitem->addChild(sitem1 ); ui->treeWidget->expandAll(); } void MainWindow::initTableWidget() { QStringList header; header<<"id"<<"name"<<"age"<<"height"<<"操作1"<<"操作2"; ui->tableWidget->setColumnCount(6); ui->tableWidget->setHorizontalHeaderLabels(header); QTableWidgetItem *idItem=new QTableWidgetItem; idItem->setText("10001"); ui->tableWidget->setRowCount(1); ui->tableWidget->setItem(0,0,idItem); QPushButton *change=new QPushButton; change->setText("修改"); ui->tableWidget->setCellWidget(0,4,change); QPushButton *del=new QPushButton; del->setText("删除"); ui->tableWidget->setCellWidget(0,5,del); /*QStringList header; header << "详细信息"; ui->tableWidget->setColumnCount(1); ui->tableWidget->setHorizontalHeaderLabels(header); ui->tableWidget->horizontalHeader()->setStretchLastSection(true);*/ } void MainWindow::ContextMenuRequested(QPoint pos) { if(ui->treeWidget->itemAt(pos) == nullptr) { //当点击的位置没有条目 //显示菜单 QMenu menu; QAction *addact = new QAction; addact->setText("add University"); menu.addAction(addact); connect(addact,SIGNAL(triggered(bool)), this,SLOT(addUniversity())); QAction *removeact = new QAction; removeact->setText("remove all"); menu.addAction(removeact); connect(removeact,SIGNAL(triggered(bool)), this,SLOT(removeAll())); menu.exec(QCursor::pos()); }else { //当点击的位置有条目 QMenu menu; if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 0) { QAction *addact = new QAction; addact->setText("add Collage"); menu.addAction(addact); connect(addact,SIGNAL(triggered(bool)), this,SLOT(addCollage())); menu.exec(QCursor::pos()); } else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 1) { QAction *stuaddact = new QAction; stuaddact->setText("add student"); menu.addAction(stuaddact); connect(stuaddact,SIGNAL(triggered(bool)),this,SLOT(addStudent())); QAction *teaaddact = new QAction; teaaddact->setText("add teacher"); menu.addAction(teaaddact); connect(teaaddact,SIGNAL(triggered(bool)),this,SLOT(addTeacher())); QAction *removeact = new QAction; removeact->setText("remove Collage"); menu.addAction(removeact); connect(removeact,SIGNAL(triggered(bool)),this,SLOT(removeCollage())); menu.exec(QCursor::pos()); } else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 2) { QAction *teaaddact = new QAction; teaaddact->setText("add teachername"); menu.addAction(teaaddact); connect(teaaddact,SIGNAL(triggered(bool)),this,SLOT(addTeacherName())); QAction *removeact = new QAction; removeact->setText("remove Teacher"); menu.addAction(removeact); connect(removeact,SIGNAL(triggered(bool)), this,SLOT(removeTeacher())); menu.exec(QCursor::pos()); } else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 3) { QAction *stuaddact = new QAction; stuaddact->setText("add studentname"); menu.addAction(stuaddact); connect(stuaddact,SIGNAL(triggered(bool)),this,SLOT(addStudentName())); QAction *removeact = new QAction; removeact->setText("remove Student"); menu.addAction(removeact); connect(removeact,SIGNAL(triggered(bool)), this,SLOT(removeStudent())); menu.exec(QCursor::pos()); } else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 4) { QAction *removeact = new QAction; removeact->setText("remove TeacherName"); menu.addAction(removeact); connect(removeact,SIGNAL(triggered(bool)), this,SLOT(removeTeacherName())); menu.exec(QCursor::pos()); } else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 5) { QAction *removeact = new QAction; removeact->setText("remove StudentName"); menu.addAction(removeact); connect(removeact,SIGNAL(triggered(bool)), this,SLOT(removeStudentName())); menu.exec(QCursor::pos()); } if (!menu.actions().isEmpty()) { menu.exec(ui->treeWidget->mapToGlobal(pos)); } } } void MainWindow::addUniversity() { //添加根节点 QTreeWidgetItem *uitem = new QTreeWidgetItem; //设置隐藏属性 uitem->setData(0,Qt::UserRole,0); uitem->setText(0,"学校"); ui->treeWidget->addTopLevelItem(uitem); } void MainWindow::addCollage() { //1.找到当前节点 QTreeWidgetItem*cur = ui->treeWidget->currentItem(); QTreeWidgetItem *child = new QTreeWidgetItem; child->setData(0,Qt::UserRole,1); child->setText(0,"学院"); cur->addChild(child); cur->setExpanded(true); // 自动展开父节点 } void MainWindow::addTeacher() { //1.找到当前节点 QTreeWidgetItem*cur = ui->treeWidget->currentItem(); QTreeWidgetItem *child = new QTreeWidgetItem; child->setData(0,Qt::UserRole,2); child->setText(0,"老师"); cur->addChild(child); cur->setExpanded(true); } void MainWindow::addStudent() { //1.找到当前节点 QTreeWidgetItem*cur = ui->treeWidget->currentItem(); QTreeWidgetItem *child = new QTreeWidgetItem; child->setData(0,Qt::UserRole,3); child->setText(0,"学生"); cur->addChild(child); cur->setExpanded(true); // 自动展开父节点 } void MainWindow::removeAll() { //删除所有节点 ui->treeWidget->clear(); } void MainWindow::removeCollage() { QTreeWidgetItem * paret = ui->treeWidget->currentItem()->parent(); paret->takeChild(ui->treeWidget->currentIndex().row()); } void MainWindow::addTeacherName() { //1.找到当前节点 QTreeWidgetItem*cur = ui->treeWidget->currentItem(); QTreeWidgetItem *child = new QTreeWidgetItem; child->setData(0,Qt::UserRole,4); child->setText(0,"老师1"); cur->addChild(child); cur->setExpanded(true); } void MainWindow::addStudentName() { //1.找到当前节点 QTreeWidgetItem*cur = ui->treeWidget->currentItem(); QTreeWidgetItem *child = new QTreeWidgetItem; child->setData(0,Qt::UserRole,5); child->setText(0,"学生1"); cur->addChild(child); cur->setExpanded(true); } void MainWindow::removeTeacher() { QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent(); parent->takeChild(ui->treeWidget->currentIndex().row()); } void MainWindow::removeStudent() { QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent(); parent->takeChild(ui->treeWidget->currentIndex().row()); } void MainWindow::removeTeacherName() { QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent(); parent->takeChild(ui->treeWidget->currentIndex().row()); } void MainWindow::removeStudentName() { QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent(); parent->takeChild(ui->treeWidget->currentIndex().row()); } void MainWindow::addButtonClicked() { addDialog dialog; dialog.exec(); } void MainWindow::deleteButtonClicked() { QMessageBox::information(this, "信息确认", "确定要删除这条记录吗?"); } void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { Q_UNUSED(column); if (!item) return; int role = item->data(0, Qt::UserRole).toInt(); switch(role) { case 0: // 学校 showUniversityInfo(); break; case 1: // 学院 showCollegeInfo(); break; case 4: // 老师姓名 showTeacherInfo(); break; case 5: // 学生姓名 showStudentInfo(); break; } } void MainWindow::showUniversityInfo() { QStringList header; header<<"uid"<<"uname"<<"uadd"; ui->tableWidget->setColumnCount(3); ui->tableWidget->setHorizontalHeaderLabels(header); ui->tableWidget->setRowCount(1); ui->tableWidget->setItem(0, 0, new QTableWidgetItem(dataManager->getUniversityUid())); ui->tableWidget->setItem(0, 1, new QTableWidgetItem(dataManager->getUniversityUname())); ui->tableWidget->setItem(0, 2, new QTableWidgetItem(dataManager->getUniversityUaddr())); /*ui->tableWidget->setItem(0, 0, new QTableWidgetItem("U10001")); ui->tableWidget->setItem(0, 1, new QTableWidgetItem("北京大学")); ui->tableWidget->setItem(0, 2, new QTableWidgetItem("北京市")); */ /*for (int row = 0; row < 3; ++row) { QPushButton *changeBtn = new QPushButton("修改"); QPushButton *delBtn = new QPushButton("删除"); ui->tableWidget->setCellWidget(row, 4, changeBtn); ui->tableWidget->setCellWidget(row, 5, delBtn); // 连接按钮信号 connect(changeBtn, &QPushButton::clicked, [this, row]() { onModifyButtonClicked(row); }); connect(delBtn, &QPushButton::clicked, [this, row]() { onDeleteButtonClicked(row); }); } */ } void MainWindow::showCollegeInfo() { auto colleges = dataManager->getColleges(); QStringList header; header<<"uid"<<"cname"; ui->tableWidget->setColumnCount(2); ui->tableWidget->setHorizontalHeaderLabels(header); /* ui->tableWidget->setRowCount(1); ui->tableWidget->setItem(0, 0, new QTableWidgetItem("C0001")); ui->tableWidget->setItem(0, 1, new QTableWidgetItem("计算机学院")); */ ui->tableWidget->setRowCount(colleges.size()); for (int i = 0; i < colleges.size(); ++i) { ui->tableWidget->setItem(i, 0, new QTableWidgetItem(colleges[i].first)); ui->tableWidget->setItem(i, 1, new QTableWidgetItem(colleges[i].second)); } } void MainWindow::showTeacherInfo() { QStringList header; header<<"tid"<<"name"<<"age"<<"height"; ui->tableWidget->setColumnCount(4); ui->tableWidget->setHorizontalHeaderLabels(header); ui->tableWidget->setRowCount(1); // 第一行数据 ui->tableWidget->setItem(0, 0, new QTableWidgetItem("T10001")); ui->tableWidget->setItem(0, 1, new QTableWidgetItem("闻清砚")); ui->tableWidget->setItem(0, 2, new QTableWidgetItem("30")); ui->tableWidget->setItem(0, 3, new QTableWidgetItem("169")); } void MainWindow::showStudentInfo() { QStringList header; header<<"sid"<<"name"<<"age"<<"height"; ui->tableWidget->setColumnCount(4); ui->tableWidget->setHorizontalHeaderLabels(header); ui->tableWidget->setRowCount(1); // 第一行数据 ui->tableWidget->setItem(0, 0, new QTableWidgetItem("T10001")); ui->tableWidget->setItem(0, 1, new QTableWidgetItem("司南钰")); ui->tableWidget->setItem(0, 2, new QTableWidgetItem("28")); ui->tableWidget->setItem(0, 3, new QTableWidgetItem("169")); }
12-03
#include "OnLineDataWidget.h" #include <QCoreApplication> #include <QHBoxLayout> #include "CoveragePixGrainSingleton.h" #include <QDir> #include <QMessageBox> #include <QApplication> #include <QProgressBar> #include <QKeyEvent> #include "httpclient.h" #include "configinfo.h" OnLineDataWidget::OnLineDataWidget(QWidget *parent) : OSDialaog(parent) { m_pCurBtn = nullptr; m_pCurProress = nullptr; m_sFileDir = QString("%1/data/").arg(QApplication::applicationDirPath()); QDir tempDir; if (!tempDir.exists(m_sFileDir)) tempDir.mkpath(m_sFileDir); initUI(); } void OnLineDataWidget::initUI() { QWidget *mainWidget = new QWidget(this); m_TreeData = new QTreeView(this); m_TreeData->setStyleSheet("QTreeView::item:hover{background-color:rgba(0,255,0,50)}"); m_TreeData->autoFillBackground(); connect(m_TreeData, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onDoubleClicked(QModelIndex))); m_TreeData->setExpandsOnDoubleClick(true); m_DataModel = new QStandardItemModel(this); m_TreeData->setModel(m_DataModel); // 导入模型 m_TreeData->setSelectionMode(QAbstractItemView::SingleSelection); m_DataModel->setHorizontalHeaderLabels(QStringList() << tr("序号") << tr("文件名称") << tr("文件大小") << tr("上传时间") << tr("操作") << tr("状态") << tr("进度")); m_DataModel->horizontalHeaderItem(0)->setTextAlignment(Qt::AlignCenter); m_DataModel->horizontalHeaderItem(1)->setTextAlignment(Qt::AlignCenter); m_DataModel->horizontalHeaderItem(2)->setTextAlignment(Qt::AlignCenter); m_DataModel->horizontalHeaderItem(3)->setTextAlignment(Qt::AlignCenter); m_DataModel->horizontalHeaderItem(4)->setTextAlignment(Qt::AlignCenter); m_DataModel->horizontalHeaderItem(5)->setTextAlignment(Qt::AlignCenter); m_DataModel->horizontalHeaderItem(6)->setTextAlignment(Qt::AlignCenter); m_TreeData->sortByColumn(3, Qt::DescendingOrder); QHBoxLayout *toolLayout = new QHBoxLayout; QPushButton *applyBtn = new QPushButton(tr("确定"), this); connect(applyBtn, SIGNAL(clicked(bool)), this, SLOT(on_applySeting())); QLabel *labTips = new QLabel(tr("选中要导入的数据后双击或者点击【确定】按钮以完成导入"), this); labTips->setAlignment(Qt::AlignLeft); labTips->setStyleSheet("QLabel{font: normal italic 18px;color:#C0C0C0;}"); toolLayout->addStretch(); toolLayout->addWidget(labTips); toolLayout->addWidget(applyBtn); QVBoxLayout *allLayout = new QVBoxLayout; allLayout->addWidget(m_TreeData); allLayout->addLayout(toolLayout); mainWidget->setLayout(allLayout); this->setMinimumSize(800, 600); this->setMainWidget(mainWidget, tr("在线数据列表")); } void OnLineDataWidget::showUI() { refreshDataToUI(); show(); } bool OnLineDataWidget::warnMessageBox(QString title, QString content) { QFont font; font.setFamily(tr("微软雅黑")); QMessageBox qmgbox; font.setPointSize(16); qmgbox.setFont(font); qmgbox.setText(content); qmgbox.setWindowTitle(title); // 添加按钮 qmgbox.addButton(tr("确定"), QMessageBox::YesRole); qmgbox.setIcon(QMessageBox::Icon::Warning); return qmgbox.exec(); } void OnLineDataWidget::onDoubleClicked(QModelIndex index) { Q_UNUSED(index); int iRow = m_TreeData->currentIndex().row(); QStandardItem *currentItem = m_DataModel->item(iRow, 1); QStandardItem *stateItem = m_DataModel->item(iRow, 5); QString state = stateItem->text(); if (state.compare("未下载") == 0) { warnMessageBox(tr("导入数据"), tr("文件未下载到本地")); return; } m_sFilePath = QString("%1%2").arg(m_sFileDir).arg(currentItem->text()); this->close(); emit onLineData(m_sFilePath); } void OnLineDataWidget::on_applySeting() { int iRow = m_TreeData->currentIndex().row(); QStandardItem *currentItem = m_DataModel->item(iRow, 1); QStandardItem *stateItem = m_DataModel->item(iRow, 5); QString state = stateItem->text(); if (state.compare("已下载") != 0) { warnMessageBox(tr("导入数据"), tr("文件未下载到本地")); return; } m_sFilePath = QString("%1%2").arg(m_sFileDir).arg(currentItem->text()); this->close(); emit onLineData(m_sFilePath); } /* * @brief refreshLocalDataToUI * 刷新本地数据到界面 */ void OnLineDataWidget::refreshDataToUI() { m_DataModel->removeRows(0, m_DataModel->rowCount()); for (int i = 0; i < m_vecData.size(); i++) { QString fileName = m_vecData.at(i).fileName; QString filePath = QString("%1/%2").arg(m_sFileDir).arg(fileName); QFileInfo info(filePath); bool bDownload = info.exists(); QStandardItem *parentItem = new QStandardItem(QString("%1").arg(i + 1)); // 创建一个条目对象 parentItem->setEditable(false); parentItem->setTextAlignment(Qt::AlignCenter); parentItem->setCheckable(false); m_DataModel->appendRow(parentItem); QStandardItem *Item1 = new QStandardItem(fileName); Item1->setEditable(false); Item1->setTextAlignment(Qt::AlignCenter); Item1->setData(m_vecData.at(i).fileName); m_DataModel->setItem(m_DataModel->rowCount() - 1, 1, Item1); QStandardItem *Item2 = new QStandardItem(m_vecData.at(i).fileSize); Item2->setEditable(false); Item2->setTextAlignment(Qt::AlignCenter); Item2->setData(m_vecData.at(i).fileSize); m_DataModel->setItem(m_DataModel->rowCount() - 1, 2, Item2); QStandardItem *Item3 = new QStandardItem(m_vecData.at(i).updateTime); Item3->setEditable(false); Item3->setTextAlignment(Qt::AlignCenter); m_DataModel->setItem(m_DataModel->rowCount() - 1, 3, Item3); // 添加按钮 QPushButton *pButton = new QPushButton("下载", this); pButton->setMaximumWidth(60); // 触发下载按钮的槽函数 connect(pButton, SIGNAL(clicked(bool)), this, SLOT(ClickDownloadButton())); // 为按钮设置row属性 pButton->setProperty("row", i); // 为按钮设置fileName属性 pButton->setProperty("fileName", filePath); pButton->setProperty("pid", m_vecData.at(i).pid); pButton->setProperty("md5", m_vecData.at(i).sMd5); m_TreeData->setIndexWidget(m_DataModel->index(m_DataModel->rowCount() - 1, 4), pButton); QStandardItem *Item5 = new QStandardItem("未下载"); if (bDownload) { QString sMd5 = fileMd5(filePath); if (sMd5.compare(m_vecData.at(i).sMd5) == 0) { Item5->setText("已下载"); Item5->setForeground(QBrush(Qt::green)); } } Item5->setEditable(false); Item5->setTextAlignment(Qt::AlignCenter); m_DataModel->setItem(m_DataModel->rowCount() - 1, 5, Item5); QProgressBar *pBar = new QProgressBar(this); pBar->setRange(0, 100); pBar->setAlignment(Qt::AlignRight | Qt::AlignVCenter); m_TreeData->setIndexWidget(m_DataModel->index(m_DataModel->rowCount() - 1, 6), pBar); m_TreeData->setExpanded(parentItem->index(), true); } for (int i = 0; i < 6; i++) { m_TreeData->resizeColumnToContents(i); } } void OnLineDataWidget::ClickDownloadButton() { m_pCurBtn = (QPushButton *)sender(); // 产生事件的对象 m_nCurRow = m_pCurBtn->property("row").toInt(); // 取得按钮的行号属性 m_sFilePath = m_pCurBtn->property("fileName").toString(); // 获取按钮的fileName属性,其他的可以自行添加。 m_sSelectPid = m_pCurBtn->property("pid").toString(); m_sCurMd5 = m_pCurBtn->property("md5").toString(); m_pCurProress = (QProgressBar *)m_TreeData->indexWidget(m_DataModel->index(m_nCurRow, 6)); QStandardItem *item = m_DataModel->item(m_nCurRow, 2); QString sSize = item->text(); int index = 0; if ((index = sSize.indexOf("KB")) > 0) { sSize = sSize.left(index); m_nCurTotalBytes = sSize.toDouble() * 1024; } else if ((index = sSize.indexOf("MB")) > 0) { sSize = sSize.left(index); m_nCurTotalBytes = sSize.toDouble() * 1024 * 1024; } else if ((index = sSize.indexOf("GB")) > 0) { sSize = sSize.left(index); m_nCurTotalBytes = sSize.toDouble() * 1024 * 1024 * 1024; } DownloadData(); } void OnLineDataWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) { // 调用 close() 关闭窗口 close(); } QWidget::keyPressEvent(event); } void OnLineDataWidget::loadLocalData() { } /* * 写本地用户数据文件 */ bool OnLineDataWidget::writeLocalUserDataXml() { return true; } /* * 读本地用户数据文件 */ bool OnLineDataWidget::readLocalUserDataXml() { return true; } void OnLineDataWidget::DownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { Q_UNUSED(bytesTotal); double dTemp = (double)bytesReceived / m_nCurTotalBytes; dTemp *= 100; int nCurPos = (int)dTemp; m_pCurProress->setValue(nCurPos); } void OnLineDataWidget::DownloadResult() { m_pCurBtn->setEnabled(true); QStandardItem *currentItem = m_DataModel->item(m_nCurRow, 5); m_pCurProress->setValue(100); QString sMd5 = fileMd5(m_sFilePath); if (sMd5.compare(m_sCurMd5) == 0) { currentItem->setText("已下载"); currentItem->setForeground(QBrush(Qt::green)); } else { currentItem->setText("校验失败"); } } void OnLineDataWidget::DownloadData() { QString sUrl = QString("http://%1:%2/api/download?dataId=%3") .arg(ConfigInfo::GetInstance()->GetHttpIp()) .arg(ConfigInfo::GetInstance()->GetHttpPort()) .arg(m_sSelectPid); // 开始下载数据文件包 std::function<void()> func = std::bind(&OnLineDataWidget::DownloadResult, this); std::function<void(qint64, qint64)> funcProgress = std::bind(&OnLineDataWidget::DownloadProgress, this, std::placeholders::_1, std::placeholders::_2); HttpClient(sUrl).complete(func).downloadProgress(funcProgress).download(m_sFilePath); // QMessageBox::information(NULL, "Title", m_sFilePath, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); } bool OnLineDataWidget::updateData(QVector<DataPack> &data) { m_vecData.clear(); m_vecData = data; refreshDataToUI(); return true; }
最新发布
12-13
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值