#include "addapp.h" #include #include #include #include #include "config.h" #include "applicationmanager.h" #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING #include namespace fs = std::experimental::filesystem; AddApp::AddApp(bool isEdit, Record2 *row , QWidget* parent) : QDialog(parent) { ui.setupUi(this); this->row=row; SQLiteHelper sqlite_helper; setFixedSize(450, 600); Record2 record; setWindowFlags(Qt::WindowCloseButtonHint); form = new QFormLayout; name = new QLineEdit; if(isEdit) { record=*row;//最初为啥这么写我也忘了 } if (record.orig_name.isEmpty()) { path = new QPushButton(QString::fromLocal8Bit("浏览")); connect(path, &QPushButton::clicked, this, &AddApp::broswer_exe); form->addRow(QString::fromLocal8Bit("路径"), path); if (isEdit) { sqlite_helper.get_a_software(row->orig_name, &record); name_label = new QLabel(orig_name_str); form->addRow(QString::fromLocal8Bit("全名"), name_label); if (!record.orig_name.isEmpty()) { name_label->setText(record.orig_name); } orig_name_str = record.orig_name; } else { orig_name = new QLineEdit; form->addRow(QString::fromLocal8Bit("全名"), orig_name); } form->addRow(QString::fromLocal8Bit("名称"), name); sort = new QLineEdit; sort->setValidator(new QIntValidator(10, 100)); sort->setText("50"); form->addRow(QString::fromLocal8Bit("排序"), sort); QList categrories; layout_inner = new QVBoxLayout; sqlite_helper.get_category(categrories, true); for (auto category : categrories) { QCheckBox* check_box = new QCheckBox(category.name); layout_inner->addWidget(check_box); categories_list.insert(category.id, check_box); } form->addRow(QString::fromLocal8Bit("类别"), layout_inner); submit_btn = new QPushButton(QString::fromLocal8Bit("提交")); form->addWidget(submit_btn); this->setLayout(form); connect(path, &QPushButton::click, this, &AddApp::broswer_exe); connect(submit_btn, &QPushButton::clicked, this, &AddApp::submit); this->isEdit = isEdit; } else { name->setText(record.name); name_str = record.name; sort_str = QString::number(record.sort); path = new QPushButton(QString::fromLocal8Bit("浏览")); path_str = record.exe_file; path->setText(QString::fromWCharArray(fs::path(path_str.toStdWString()).filename().c_str())); connect(path, &QPushButton::clicked, this, &AddApp::broswer_exe); if (record.op == "soft") { form->addRow(QString::fromLocal8Bit("路径"), path); } if (isEdit) { sqlite_helper.get_a_software(row->orig_name, &record); name_label = new QLabel(orig_name_str); form->addRow(QString::fromLocal8Bit("全名"), name_label); if (!record.orig_name.isEmpty()) { name_label->setText(record.orig_name); } orig_name_str = record.orig_name; } else { orig_name = new QLineEdit; form->addRow(QString::fromLocal8Bit("全名"), orig_name); } form->addRow(QString::fromLocal8Bit("名称"), name); sort = new QLineEdit; sort->setText(QString::number(record.sort)); sort->setValidator(new QIntValidator(10, 100)); form->addRow(QString::fromLocal8Bit("排序"), sort); QList categrories; layout_inner = new QVBoxLayout; sqlite_helper.get_category(categrories, true); this->categories = record.categories; for (auto category : categrories) { QCheckBox* check_box = new QCheckBox(category.name); if (record.categories[category.id - 1]) { check_box->setCheckState(Qt::Checked); } layout_inner->addWidget(check_box); categories_list.insert(category.id, check_box); } form->addRow(QString::fromLocal8Bit("类别"), layout_inner); submit_btn = new QPushButton(QString::fromLocal8Bit("提交")); form->addWidget(submit_btn); this->setLayout(form); connect(path, &QPushButton::click, this, &AddApp::broswer_exe); connect(submit_btn, &QPushButton::clicked, this, &AddApp::submit); this->isEdit = isEdit; } } AddApp::~AddApp() { //delete categories; delete name; if(isEdit) { delete name_label; }else { delete orig_name; } delete path; //delete sort; delete submit_btn; delete form; } void AddApp::broswer_exe(){ QString path_str_old = path_str; if(path_str.isEmpty()) { path_str = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("选择程序"), QApplication::applicationDirPath(), QString::fromLocal8Bit("应用程序 (*.exe)")); } else { path_str = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("选择程序"), path_str, QString::fromLocal8Bit("应用程序 (*.exe)")); } if (path_str.isEmpty()) { path_str = path_str_old; } fs::path file(path_str.toStdWString()); path->setText(QString::fromStdWString(file.filename().c_str())); if(!isEdit) { orig_name->setText(QString::fromStdWString(file.filename().c_str())); } } void AddApp::submit() { if(sort->text().toInt()<10||sort->text().toInt()>100) { QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("排序必须在10-100之间")); return; } if (isEdit) { QString name_str_old = name_str; QString sort_str_old = sort_str; name_str = name->text(); sort_str = sort->text(); if (name_str.isEmpty()) { name_str = name_str_old; } if (sort_str.isEmpty()) { sort_str = sort_str_old; } } else { if ((!orig_name->text().isEmpty()) && (!path->text().isEmpty())) { orig_name_str = orig_name->text(); if (name->text().isEmpty()) { name_str = orig_name_str; } else { name_str = name->text(); } sort_str = sort->text(); } else { QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("未填写全名或路径")); return; } } categories = new bool[8]; for (int i = 0; i < CATEGORIES_NUM; i++) { categories[i] = false; } categories[ALL-1] = true; for(auto key:categories_list.keys()) { categories[key - 1] = categories_list[key]->checkState(); } for (int i = 0; i < CATEGORIES_NUM; i++) { qDebug() << categories[i]; } changed = true; close(); }