diff --git a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters index aa843ae..dc17d28 100644 --- a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters +++ b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters @@ -126,9 +126,6 @@ Source Files - - Source Files - Source Files @@ -138,6 +135,9 @@ Source Files + + Source Files + diff --git a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user index e9cd272..bdd86c0 100644 --- a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user +++ b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user @@ -1,7 +1,11 @@  - 79c86fb12b36dfa33d1a537c9af100b4c7928a9c + autostart + WindowsLocalDebugger + + + $(QmlDebug) WindowsLocalDebugger diff --git a/OfficeAssistant_msvc/applicationmanager.cpp b/OfficeAssistant_msvc/applicationmanager.cpp index d25f9f7..9999d47 100644 --- a/OfficeAssistant_msvc/applicationmanager.cpp +++ b/OfficeAssistant_msvc/applicationmanager.cpp @@ -123,7 +123,7 @@ void ApplicationManager::onclick1(QString op, QString func, QString path, QStrin add_app.get_sort(), add_app.get_categories()); if (!ok) { - QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("插入失败,全名是否重名")); + QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("插入失败,全名是否重名?")); } emit refresh_tab(); @@ -153,7 +153,7 @@ void ApplicationManager::onclick1(QString op, QString func, QString path, QStrin { UserImprove user_improve; user_improve.exec(); - if(file.open(QIODevice::WriteOnly)) + if(file.open(QIODevice::WriteOnly|QIODevice::Text)) { QJsonObject rootObj; rootObj.insert("agree", agree); diff --git a/OfficeAssistant_msvc/globalvariables.h b/OfficeAssistant_msvc/globalvariables.h index a07280c..dd47317 100644 --- a/OfficeAssistant_msvc/globalvariables.h +++ b/OfficeAssistant_msvc/globalvariables.h @@ -15,5 +15,6 @@ extern bool autostart; extern bool agree; extern QString background_color; extern QString text_color; +extern QString text_cover_color; extern ApplicationManager *application_manager; #endif //OFFICEASSISTANT_GLOBALVARIABLES_H diff --git a/OfficeAssistant_msvc/mysettingsdialog.cpp b/OfficeAssistant_msvc/mysettingsdialog.cpp index 0644825..9073812 100644 --- a/OfficeAssistant_msvc/mysettingsdialog.cpp +++ b/OfficeAssistant_msvc/mysettingsdialog.cpp @@ -1,4 +1,4 @@ -#include "mysettingsdialog.h" +#include "mysettingsdialog.h" #include #include #include "netio.h" @@ -12,9 +12,9 @@ MySettingsDialog::MySettingsDialog(QWidget *parent) setWindowFlags(Qt::WindowCloseButtonHint); this->setFixedSize(width(), height()); HKEY hRoot = HKEY_CURRENT_USER; - wchar_t *szSubKey = (wchar_t *)"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; + wchar_t *szSubKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; HKEY hKey; - DWORD dwDisposition = REG_OPENED_EXISTING_KEY; // ڲ + DWORD dwDisposition = REG_OPENED_EXISTING_KEY; // 如果不存在不创建 LONG lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); if (lRet != ERROR_SUCCESS) { @@ -22,9 +22,10 @@ MySettingsDialog::MySettingsDialog(QWidget *parent) } QString app = QApplication::applicationFilePath(); app.replace("/", "\\"); - DWORD size=128+sizeof(wchar_t); - char reg[128] = { 0 }; - lRet = RegQueryValueEx(hKey, L"OfficeAssistant", NULL, NULL,(LPBYTE)reg, &size); + app += " autostart"; + DWORD size=256*sizeof(wchar_t); + wchar_t reg[256] = { 0 }; + lRet = RegQueryValueEx(hKey, LENG_NAME, NULL, NULL,(LPBYTE)reg, &size); if (lRet==0) { ui.autostart->setChecked(true); } @@ -47,11 +48,11 @@ void MySettingsDialog::autoStart(int state) HKEY hRoot = HKEY_CURRENT_USER; wchar_t *szSubKey = (wchar_t*)L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; HKEY hKey; - DWORD dwDisposition = REG_OPENED_EXISTING_KEY; // ڲ + DWORD dwDisposition = REG_OPENED_EXISTING_KEY; // 如果不存在不创建 LONG lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); if (lRet != ERROR_SUCCESS) { - QMessageBox::critical(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("ʧ")); + QMessageBox::critical(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("创建开机启动项失败")); return; } QString app = QApplication::applicationFilePath(); @@ -61,7 +62,7 @@ void MySettingsDialog::autoStart(int state) lRet = RegSetValueEx(hKey, LENG_NAME, 0, REG_SZ, (BYTE*)app.toStdWString().c_str(), app.length()*sizeof(wchar_t)); if (lRet == ERROR_SUCCESS) { - QMessageBox::information(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("ɹ")); + QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("创建开机启动项成功")); } RegCloseKey(hKey); if(agree) @@ -78,14 +79,14 @@ void MySettingsDialog::autoStart(int state) LONG lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); if (lRet != ERROR_SUCCESS) { - QMessageBox::critical(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("Ƴʧܡ")); + QMessageBox::critical(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("移除开机启动项失败。")); return; } QString app = QApplication::applicationFilePath(); lRet = RegDeleteValue(hKey, LENG_NAME); if (lRet == ERROR_SUCCESS) { - QMessageBox::information(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("Ƴɹ")); + QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("移除开机启动项成功。")); } RegCloseKey(hKey); if(agree) @@ -116,9 +117,9 @@ void MySettingsDialog::createShortcut() { QString srcFile = QApplication::applicationFilePath(); bool succeed=QFile::link(srcFile, deskTopPath); if (succeed) { - QMessageBox::information(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("ݷʽɹ")); + QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("创建快捷方式成功。")); } else { - QMessageBox::information(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("ݷʽʧܡ")); + QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("创建快捷方式失败。")); } } \ No newline at end of file diff --git a/OfficeAssistant_msvc/navbar.cpp b/OfficeAssistant_msvc/navbar.cpp index e15c1a1..e8c17f3 100644 --- a/OfficeAssistant_msvc/navbar.cpp +++ b/OfficeAssistant_msvc/navbar.cpp @@ -56,16 +56,13 @@ NavBar::NavBar(MainScreen *mainScreen,QWidget *parent) : config_request.sendRequest(&config_response); SQLiteHelper sqlite_helper; sqlite_helper.get_software(&buttonStructs, &config_response); - background_color = config_response.basic.backgroud_color; - text_color = config_response.basic.title_color; - text_cover_color = config_response.basic.title_cover_color; if(!config_response.succeed) { - qColor.setNamedColor(buttonStructs[0].background_color); + qColor.setNamedColor(background_color); }else { - qColor.setNamedColor(config_response.basic.backgroud_color); + qColor.setNamedColor(background_color); } layout2 = new QHBoxLayout; layout_right = new QHBoxLayout; @@ -89,7 +86,7 @@ NavBar::NavBar(MainScreen *mainScreen,QWidget *parent) : MyButton *myButton = new MyButton(buttonStruct, height(), height(), &buttons,this); myButton->setMaximumHeight(parent->height() / 8); layout_right->addWidget(myButton); - //myButton->show(); + myButton->show(); connect(myButton, &MyButton::clicked1, mainWindowLayout, &MainWindowLayout::clickButton); buttons << myButton; } diff --git a/OfficeAssistant_msvc/navbar.h b/OfficeAssistant_msvc/navbar.h index 4191fe9..48e04d1 100644 --- a/OfficeAssistant_msvc/navbar.h +++ b/OfficeAssistant_msvc/navbar.h @@ -51,9 +51,6 @@ private: int width2; int height2; QWidget* parent; - QString background_color; - QString text_color; - QString text_cover_color; QNetworkAccessManager *manager; QNetworkReply *reply; QEventLoop eventLoop; diff --git a/OfficeAssistant_msvc/netio.cpp b/OfficeAssistant_msvc/netio.cpp index e67f540..26f1b37 100644 --- a/OfficeAssistant_msvc/netio.cpp +++ b/OfficeAssistant_msvc/netio.cpp @@ -33,6 +33,7 @@ #pragma comment(lib,"comsuppw.lib") QString background_color; QString text_color; +QString text_cover_color; //读取注册表获取MachineUUID bool IsWin11AndLater() { @@ -256,8 +257,8 @@ void ConfigRequest::sendRequest(ConfigResponse *configResponse) { for(auto value:array){ QJsonObject object=value.toObject(); Button button; - button.img = object.value("img").toString(); - button.png = object.value("logo").toString(); + button.img = object.value("logo").toString(); + button.png = object.value("img").toString(); button.img_name = object.value("img_name").toString(); button.name = object.value("name").toString(); button.type = object.value("type").toString(); @@ -324,8 +325,6 @@ void RequestBodyBase::sendRequest() { DeviceRequest::DeviceRequest() : RequestBodyBase() { - //CPU - QString cpu = QSysInfo::currentCpuArchitecture(); //内存大小 MEMORYSTATUSEX status; status.dwLength = sizeof(status); @@ -334,60 +333,15 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { //硬盘大小 QStorageInfo storage = QStorageInfo::root(); int disk = storage.bytesTotal() / static_cast(1024 * 1024 * 1024); - //显卡型号 - QStringList gpus; - BOOL success; - DWORD deviceIndex = 0; - DISPLAY_DEVICE displayDevice; - displayDevice.cb = sizeof(displayDevice); - while (EnumDisplayDevices(NULL, deviceIndex, &displayDevice, 0)) { - WCHAR valueName[128]; - DWORD valueSize; - DWORD valueType; - BYTE valueData[MAX_PATH]; - HKEY hKey; - WCHAR keyName[128]; - wsprintf(keyName, L"SYSTEM\\CurrentControlSet\\Control\\Video\\%s\\HardwareInformation", - displayDevice.DeviceID); - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { - valueSize = sizeof(valueData); - wsprintf(valueName, L"HardwareInformation.AdapterString"); - if (RegQueryValueEx(hKey, valueName, NULL, &valueType, valueData, &valueSize) == ERROR_SUCCESS) { - Q_ASSERT(valueType == REG_SZ); - QString adapterString = QString::fromWCharArray((wchar_t *) valueData, valueSize / sizeof(wchar_t) - 1); - gpus.append(adapterString); - } - RegCloseKey(hKey); - } - deviceIndex++; - displayDevice.cb = sizeof(displayDevice); - } - //主板型号 - QString motherboard = QSysInfo::prettyProductName(); + //WMI获取网卡型号 - HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED); + HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (FAILED(hr)) { std::cerr << "Failed to initialize COM library." << std::endl; return; } QStringList netCards; - hr = CoInitializeSecurity( - NULL, - -1, - NULL, - NULL, - RPC_C_AUTHN_LEVEL_DEFAULT, - RPC_C_IMP_LEVEL_IMPERSONATE, - NULL, - EOAC_NONE, - NULL - ); - if (FAILED(hr)) { - std::cerr << "Failed to initialize security." << std::endl; - CoUninitialize(); - return; - } - + IWbemLocator* pLoc = NULL; hr = CoCreateInstance( CLSID_WbemLocator, @@ -441,7 +395,7 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { IEnumWbemClassObject* pEnumerator = NULL; hr = pSvc->ExecQuery( _bstr_t("WQL"), - _bstr_t("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE AND NetConnectionStatus = 3"), + _bstr_t("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator @@ -471,6 +425,78 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { pClassObj->Release(); } + pEnumerator->Release(); + pEnumerator = nullptr; + // 获取 CPU 信息 + hr = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_Processor"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); + IWbemClassObject* pclsObj = NULL; + uReturn = 0; + QString cpu; + while (pEnumerator) { + HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); + if (0 == uReturn) break; + + VARIANT vtProp; + hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); + if (SUCCEEDED(hr)) { + cpu=QString::fromWCharArray(vtProp.bstrVal); + VariantClear(&vtProp); + } + pclsObj->Release(); + } + + // 获取主板信息 + QString motherboard; + hr = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_BaseBoard"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); + while (pEnumerator) { + HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); + if (0 == uReturn) break; + + VARIANT vtProp; + hr = pclsObj->Get(L"Product", 0, &vtProp, 0, 0); + if (SUCCEEDED(hr)) { + motherboard=QString::fromWCharArray(vtProp.bstrVal); + VariantClear(&vtProp); + } + pclsObj->Release(); + } + + pEnumerator->Release(); + pEnumerator=nullptr; + //WMI获取显卡型号 + hr = pSvc->ExecQuery( + bstr_t("WQL"), + bstr_t("SELECT * FROM Win32_VideoController"), + WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, + NULL, + &pEnumerator); + + if (FAILED(hr)) + { + std::cerr << "Query failed." << std::endl; + pSvc->Release(); + pLoc->Release(); + CoUninitialize(); + return; + } + QStringList graphicsCards; + pclsObj->Release(); + pclsObj = NULL; + uReturn = 0; + while (pEnumerator) + { + HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); + if (0 == uReturn) break; + + VARIANT vtProp; + hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); + if (SUCCEEDED(hr)) + { + graphicsCards<< QString::fromWCharArray(vtProp.bstrVal); + VariantClear(&vtProp); + } + pclsObj->Release(); + } //WMI获取声卡型号 hr = pSvc->ExecQuery( _bstr_t("WQL"), @@ -531,7 +557,7 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { hr = pClassObj->Get(L"Manufacturer", 0, &vtProp, 0, 0); if (SUCCEEDED(hr)) { - std::wcout << "Manufacturer: " << vtProp.bstrVal << std::endl; + RAMModel<Release(); pLoc->Release(); CoUninitialize(); - DISPLAY_DEVICE d = { sizeof(DISPLAY_DEVICE) }; - ::EnumDisplayDevices(NULL, 0, &d, 0); - QString monitor=QString::fromWCharArray(d.DeviceString, wcslen(d.DeviceString)); + + DISPLAY_DEVICE dd; + ZeroMemory(&dd, sizeof(dd)); + dd.cb = sizeof(dd); + int deviceIndex = 0; + QStringList monitors; + // 枚举显卡设备 + while (EnumDisplayDevices(0, deviceIndex, &dd, 0)) + { + DISPLAY_DEVICE monitor; + ZeroMemory(&monitor, sizeof(monitor)); + monitor.cb = sizeof(monitor); + int monitorIndex = 0; + + // 对每个显卡枚举其连接的显示器 + while (EnumDisplayDevices(dd.DeviceName, monitorIndex, &monitor, 0)) + { + // 打印显示器型号 + monitors<insert("RAM",QJsonValue(ram)); object->insert("Hard_Disk",QJsonValue(disk)); QJsonArray *gpu_array=new QJsonArray; - for(auto gpu:gpus) { - gpu_array->append(gpu); - } + + for(auto gpu:graphicsCards) + { + gpu_array->append(gpu); + } object->insert("GPU",*gpu_array); delete gpu_array; object->insert("Mother_Board",motherboard); @@ -582,7 +631,13 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { } object->insert("Audio_Card",*audioCards_json); delete audioCards_json; - object->insert("Monitor",monitor); + QJsonArray *monitors_json=new QJsonArray; + for(auto monitor:monitors) + { + monitors_json->append(monitor); + } + object->insert("Monitor",*monitors_json); + delete monitors_json; device->setObject(*object); delete object; QJsonObject obj_root=qJsonDocument.object(); @@ -597,6 +652,7 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { requestInfo.setUrl(QUrl(DEVICE_URL)); requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json")); //保存响应的变量 + qDebug()<post(requestInfo,qJsonDocument.toJson()); //开启一个循环,直到超时或者获取到数据为止 connect(reply,&QNetworkReply::finished, &eventLoop, &QEventLoop::quit); @@ -605,6 +661,8 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() { timer->start(5000); //启动循环 eventLoop.exec(); + qDebug()<error(); + qDebug()<readAll(); delete httpMgr; } bool SoftwareRequest::sendRequest(QHash&startMenu, QHash *records, QJsonArray &software_exists) diff --git a/OfficeAssistant_msvc/sqlitehelper.cpp b/OfficeAssistant_msvc/sqlitehelper.cpp index 9a12eb4..0f784cc 100644 --- a/OfficeAssistant_msvc/sqlitehelper.cpp +++ b/OfficeAssistant_msvc/sqlitehelper.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include "applicationmanager.h" #define MAX_KEY_LENGTH 255 @@ -30,6 +31,7 @@ #pragma comment (lib,"Shell32.lib") #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING +#include #include namespace fs= std::experimental::filesystem; @@ -768,6 +770,7 @@ bool SQLiteHelper::get_software(QList* button_structs, ConfigRespo { background_color = config_response->basic.backgroud_color; text_color = config_response->basic.title_color; + text_cover_color = config_response->basic.title_cover_color; title_color = config_response->basic.title_color; title_cover_color = config_response->basic.title_cover_color; @@ -789,7 +792,7 @@ bool SQLiteHelper::get_software(QList* button_structs, ConfigRespo array = obj_root.value("data").toObject().value("menu").toArray(); qDebug() << array; QJsonObject obj_data = obj_root.value("data").toObject(); - QJsonObject obj_basic=QJsonDocument::fromJson(obj_data.value("basic").toString().toUtf8()).object(); + QJsonObject obj_basic = obj_data.value("basic").toObject(); background_color = obj_basic.value("backgroud_color").toString(); title_color = obj_basic.value("title_color").toString(); text_color = obj_basic.value("title_color").toString(); @@ -865,7 +868,7 @@ bool SQLiteHelper::get_software(QList* button_structs, ConfigRespo delete manager; manager = nullptr; QUrl url_png(menu.png); - QNetworkRequest* request_png = new QNetworkRequest(url_logo); + QNetworkRequest* request_png = new QNetworkRequest(url_png); manager = new QNetworkAccessManager; reply = manager->get(*request_png); QTimer timer_png; @@ -877,15 +880,15 @@ bool SQLiteHelper::get_software(QList* button_structs, ConfigRespo QByteArray buffer_png; buffer_png = reply->readAll(); delete request_png; - reply->close(); QString png_path = QApplication::applicationDirPath() + DEFAULT_PNG_PATH + menu.img_name + ".png";; if ((reply->error() == QNetworkReply::NoError) && (downloadSuccess == true)) { - QFile file(QApplication::applicationDirPath() + DEFAULT_PNG_PATH + menu.img_name + ".png"); - if (file.open(QIODevice::WriteOnly)) + //没仔细研究QFile,貌似读写二进制文件挺麻烦,先用标准库吧 + std::ofstream out(png_path.toStdString(), std::ios::binary); + if(out.is_open()) { - file.write(buffer_png); - file.close(); + out.write(buffer_png.data(), buffer_png.size()); + out.close(); } } else @@ -905,8 +908,9 @@ bool SQLiteHelper::get_software(QList* button_structs, ConfigRespo buffer_png = file.readAll(); file.close(); } - } + } } + reply->close(); delete manager; manager = nullptr; bool categories[CATEGORIES_NUM] = { false }; @@ -1044,7 +1048,7 @@ bool SQLiteHelper::get_software(QList* button_structs,QString back } while (query.next()) { - QString icon = QApplication::applicationDirPath() + DEFAULT_SVG_PATH + query.value("orig_name").toString() + ".svg"; + QString icon = QApplication::applicationDirPath() + query.value("logo").toString(); ButtonStruct button_struct; button_struct.path = query.value("path").toString(); button_struct.text = query.value("name").toString(); @@ -1260,40 +1264,41 @@ bool SQLiteHelper::insert_software(QString name, QString orig_name, QString path { img = QApplication::applicationDirPath()+DEFAULT_PNG; } + QSqlQuery query_sel(db); query_sel.prepare("select id from kmd_menu where orig_name = :orig_name;"); - query_sel.bindValue(":orig_name",orig_name); - if(query_sel.exec()) + query_sel.bindValue(":orig_name", orig_name); + if (query_sel.exec()) { - if(query_sel.next()) + if (query_sel.next()) { - QString sql="update kmd_menu" + QString sql = "update kmd_menu" " set sort=:sort,locked=:locked,type=:type,category_id=:category_id," "name=:name,orig_name=:orig_name,op=:op," "func=:func,path=:path,url=:url,logo=:logo,img=:img,is_navbar=:is_navbar,is_elite=:is_elite,dev=:dev where orig_name=:orig_name;"; query.prepare(sql); - query.bindValue(":sort",sort); - query.bindValue(":locked",locked); - query.bindValue(":type",type); - query.bindValue(":category_id",categories_str); - query.bindValue(":name",name); - query.bindValue(":orig_name",orig_name); - query.bindValue(":op",op); - query.bindValue(":func",func); - query.bindValue(":path",path); - query.bindValue(":url",url); - query.bindValue(":logo",logo); - query.bindValue(":img",img); - query.bindValue(":is_navbar",is_navbar); + query.bindValue(":sort", sort); + query.bindValue(":locked", locked); + query.bindValue(":type", type); + query.bindValue(":category_id", categories_str); + query.bindValue(":name", name); + query.bindValue(":orig_name", orig_name); + query.bindValue(":op", op); + query.bindValue(":func", func); + query.bindValue(":path", path); + query.bindValue(":url", url); + query.bindValue(":logo", logo); + query.bindValue(":img", img); + query.bindValue(":is_navbar", is_navbar); query.bindValue(":is_elite", is_elite); query.bindValue(":dev", dev); - if(!query.exec()) + if (!query.exec()) { QSqlQuery rollback(db); rollback.exec("ROLLBACK;"); return false; } - + return true; } } @@ -1335,7 +1340,50 @@ bool SQLiteHelper::insert_software(QString name, QString orig_name, QString path return true; } +bool SQLiteHelper::insert_software(QString name, QString orig_name, QString path, QString sort, bool* categories) { + QSqlQuery begin(db); + begin.exec("BEGIN;"); + QSqlQuery query(db); + QString categories_str = ""; + categories[ALL - 1] = true; + QString sql = "insert into kmd_menu " + "(sort, app_id, locked, type, category_id, name, orig_name," + " create_time, op, func, path, url, " + "initial_position,status,logo,img,is_navbar,is_elite,dev) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"; + query.prepare(sql); + query.addBindValue(sort.toInt()); + query.addBindValue(""); + query.addBindValue(false); + query.addBindValue("app"); + query.addBindValue(categories_str); + query.addBindValue(name); + query.addBindValue(orig_name); + time_t create_time; + time(&create_time); + query.addBindValue(create_time); + query.addBindValue("app"); + query.addBindValue("open"); + query.addBindValue(path); + query.addBindValue(""); + query.addBindValue(""); + query.addBindValue(true); + query.addBindValue(QApplication::applicationDirPath() + DEFAULT_IMAGE); + query.addBindValue(QApplication::applicationDirPath() + DEFAULT_PNG); + query.addBindValue(false); + query.addBindValue(false); + query.addBindValue(""); + if (!query.exec()) + { + QSqlQuery rollback(db); + rollback.exec("ROLLBACK;"); + return false; + } + update_total(); + QSqlQuery commit(db); + commit.exec("COMMIT;"); + return true; +} bool SQLiteHelper::set_category(QList& categrories) { QSqlQuery work(db); diff --git a/OfficeAssistant_msvc/sqlitehelper.h b/OfficeAssistant_msvc/sqlitehelper.h index 41c7d5a..40b5f8b 100644 --- a/OfficeAssistant_msvc/sqlitehelper.h +++ b/OfficeAssistant_msvc/sqlitehelper.h @@ -51,7 +51,8 @@ class SQLiteHelper : public QObject public: SQLiteHelper(QObject *parent = nullptr); bool update_software(); - bool insert_software(QString name, QString orig_name, QString path, QString sort, bool* categories, QString logo="", QString img="",QString type="app",bool locked=false,QString op="soft",QString func="",QString url="",bool is_navbar=false,bool is_elite=false,QString dev=""); + bool insert_software(QString name, QString orig_name, QString path, QString sort, bool* categories, QString logo, QString img,QString type,bool locked,QString op,QString func,QString url,bool is_navbar,bool is_elite,QString dev); + bool insert_software(QString name, QString orig_name, QString path, QString sort, bool* categories); bool edit_software(QString name, QString orig_name, QString path, QString sort, bool* categories,QString type=""); bool get_software(QList* buttons, ConfigResponse* config_response); bool get_software(QList* button_structs,QString background_color , QString title_color, QString title_cover_color); diff --git a/OfficeAssistant_msvc/userimprove.cpp b/OfficeAssistant_msvc/userimprove.cpp index 1187b6d..8704402 100644 --- a/OfficeAssistant_msvc/userimprove.cpp +++ b/OfficeAssistant_msvc/userimprove.cpp @@ -23,6 +23,7 @@ void UserImprove::submit() { agree = false; } + close(); } void UserImprove::showDetail() { diff --git a/OfficeAssistant_msvc/userimprove.ui b/OfficeAssistant_msvc/userimprove.ui index 77ebf30..60daf32 100644 --- a/OfficeAssistant_msvc/userimprove.ui +++ b/OfficeAssistant_msvc/userimprove.ui @@ -11,7 +11,7 @@ - UserImprove + 用户体验改善计划