diff --git a/mainwindow.cpp b/mainwindow.cpp index 08a1ffa..66559f3 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -19,7 +19,7 @@ MainWindow::MainWindow(QWidget *parent) { ui->setupUi(this); - setAcceptDrops(true); // 允许窗口接受拖放事件 + setAcceptDrops(true); connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::onOpenButtonClicked); connect(ui->actionSave, &QAction::triggered, this, &MainWindow::onSaveButtonClicked); @@ -33,14 +33,11 @@ MainWindow::MainWindow(QWidget *parent) ui->actionOpen->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); ui->actionSave->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); - // 添加 "Convert" 菜单 QMenu* convertMenu = menuBar()->addMenu(tr("转换(&C)")); - // 添加 "Text to SQLite" 子菜单项,并关联槽函数 QAction* textToSqliteAction = convertMenu->addAction(tr("txt 转 SQLite")); connect(textToSqliteAction, &QAction::triggered, this, &MainWindow::convertTextToSqlite); - // 添加 "SQLite to Text" 子菜单项,并关联槽函数 QAction* sqliteToTextAction = convertMenu->addAction(tr("SQLite 转 txt")); connect(sqliteToTextAction, &QAction::triggered, this, &MainWindow::convertSqliteToText); @@ -49,11 +46,23 @@ MainWindow::MainWindow(QWidget *parent) sqliteToTextAction->setIcon(convertIcon); } + MainWindow::~MainWindow() { delete ui; } +void MainWindow::showProgressDialog(const QString& labelText, int minimum, int maximum) +{ + progressDialog = new QProgressDialog(labelText, "Cancel", minimum, maximum, this); + progressDialog->setWindowModality(Qt::WindowModal); + progressDialog->setAutoClose(false); + progressDialog->setAutoReset(false); + progressDialog->setValue(minimum); + progressDialog->show(); +} + + void MainWindow::loadTextFile(const QString& fileName) { QFile file(fileName); @@ -87,13 +96,7 @@ void MainWindow::loadTextFile(const QString& fileName) file.close(); - progressDialog = new QProgressDialog("Loading...", "Cancel", 0, 0, this); - progressDialog->setWindowModality(Qt::WindowModal); - progressDialog->setAutoClose(false); - progressDialog->setAutoReset(false); - progressDialog->setRange(0, tableRow); - progressDialog->setValue(0); - progressDialog->show(); + showProgressDialog("Converting...", 0, tableRow); // 将数据显示在表格中 QTableWidget* tableWidget = ui->tableWidget; @@ -121,14 +124,13 @@ void MainWindow::loadTextFile(const QString& fileName) tableWidget->setItem(i, j, item); } progressDialog->setValue(i); - QApplication::processEvents(); // 处理界面事件,使进度条能够更新 + QApplication::processEvents(); if (progressDialog->wasCanceled()) { tableWidget->clear(); break; } } - progressDialog->setValue(tableRow); progressDialog->hide(); tableWidget->blockSignals(false); // 恢复信号发射 } @@ -255,7 +257,6 @@ void MainWindow::convertTextToSqlite() columnNames = processedLine.split('\t', Qt::SkipEmptyParts); } - //QTextStream textStream2(&textFile); QList data; textStream.seek(0); // 读取数据行 @@ -275,6 +276,8 @@ void MainWindow::convertTextToSqlite() textFile.close(); + showProgressDialog("Converting...", 0, data.size()); + // 打开SQLite数据库 QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE"); database.setDatabaseName(sqliteFilePath); @@ -311,6 +314,7 @@ void MainWindow::convertTextToSqlite() insertQuery.chop(2); // 移除最后的逗号和空格 insertQuery += ");"; + int progress = 0; for (const QStringList& row : data) { if (row.size() != columnNames.size()) @@ -332,8 +336,17 @@ void MainWindow::convertTextToSqlite() database.close(); return; } + + ++progress; + progressDialog->setValue(progress); + QApplication::processEvents(); + if (progressDialog->wasCanceled()) + { + break; + } } + progressDialog->hide(); database.commit(); database.close(); @@ -389,6 +402,8 @@ void MainWindow::convertSqliteToText() return; } + showProgressDialog("Converting...", 0, query.size()); + // Open the text file to write data QFile textFile(textFilePath); if (!textFile.open(QIODevice::WriteOnly)) @@ -408,6 +423,7 @@ void MainWindow::convertSqliteToText() textStream.setCodec("UTF-16LE"); // Write the data to the text file + int progress = 0; while (query.next()) { QSqlRecord record = query.record(); @@ -419,10 +435,20 @@ void MainWindow::convertSqliteToText() textStream << "\t"; } textStream << "\r\n"; + + ++progress; + progressDialog->setValue(progress); + QApplication::processEvents(); + if (progressDialog->wasCanceled()) + { + break; + } } + progressDialog->hide(); textFile.close(); database.close(); QMessageBox::information(this, tr("Conversion Complete"), tr("SQLite to Text conversion completed successfully.")); } + diff --git a/mainwindow.h b/mainwindow.h index ee1f7ca..d3726a9 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -1,9 +1,8 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include "qprogressdialog.h" -#include #include +#include #include #include #include @@ -25,6 +24,7 @@ public: void dropEvent(QDropEvent *event); void convertTextToSqlite(); void convertSqliteToText(); + void showProgressDialog(const QString& labelText, int minimum, int maximum); private slots: void onOpenButtonClicked(); @@ -32,8 +32,7 @@ private slots: private: Ui::MainWindow *ui; - QProgressDialog* progressDialog; // 添加进度对话框指针 - QMenu* menuFile; - QAction* actionFile; + QProgressDialog* progressDialog; }; + #endif // MAINWINDOW_H