#include "addapp.h" #include #include #include #include #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); SQLiteHelper sqlite_helper; setFixedSize(450, 450); setWindowFlags(Qt::WindowCloseButtonHint); form = new QFormLayout; name = new QLineEdit; form->addRow(QString::fromLocal8Bit("名称"), name); if(isEdit) { name_label = new QLabel(orig_name_str); form->addRow(QString::fromLocal8Bit("全名"), name_label); if(row!=nullptr) { name_label->setText(row->orig_name); } } else { orig_name = new QLineEdit; form->addRow(QString::fromLocal8Bit("全名"), orig_name); } if(row==nullptr) { path = new QPushButton(QString::fromLocal8Bit("浏览")); connect(path, &QPushButton::clicked, this, &AddApp::broswer_exe); form->addRow(QString::fromLocal8Bit("路径"), path); sort = new QLineEdit; sort->setValidator(new QIntValidator(10, 100)); 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(row->name); name_str=row->name; sort_str=QString::number(row->sort); path = new QPushButton(QString::fromLocal8Bit("浏览")); path_str = row->exe_file; path->setText(QString::fromWCharArray(fs::path(path_str.toStdWString()).filename().c_str())); connect(path, &QPushButton::clicked, this, &AddApp::broswer_exe); form->addRow(QString::fromLocal8Bit("路径"), path); sort = new QLineEdit; sort->setText(QString::number(row->sort)); sort->setValidator(new QIntValidator(10, 100)); form->addRow(QString::fromLocal8Bit("排序"), sort); QList categrories; layout_inner = new QVBoxLayout; sqlite_helper.get_category(categrories,true); categories = row->categories; for (auto category : categrories) { QCheckBox* check_box = new QCheckBox(category.name); if(row->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())); } void AddApp::submit() { if(isEdit) { if (!path->text().isEmpty()) { 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 { QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("未填写路径")); return; } }else { if ((!orig_name->text().isEmpty()) && (!path->text().isEmpty())) { orig_name_str = orig_name->text(); if (name->text().isEmpty()) { name_str = orig_name_str; } name_str = name->text(); sort_str = sort->text(); } else { QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("未填写全名或路径")); return; } } for(auto key:categories_list.keys()) { categories[key - 1] = categories_list[key]->checkState(); } for (int i = 0; i < 8; i++) { qDebug() << categories[i]; } changed = true; close(); }