#include "public_def.h" #include #include #ifdef _WIN32 #include #endif void CUtil::msg(QWidget* parent, const QString& content) { QMessageBox::information(parent, u8"提示", content); } bool CUtil::affirm(QWidget* parent, const QString& titile, const QString& content) { QMessageBox questionBox(parent); questionBox.setText(content); questionBox.setWindowTitle(titile); questionBox.setIcon(QMessageBox::Question); questionBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); int result = questionBox.exec(); if (result != QMessageBox::Yes) { return false; } else { return true; } } QString CUtil::select_file(QWidget* parent, const QString& info, const QString& filter) { QString filePath = QFileDialog::getOpenFileName(parent, info, QDir::homePath(), filter); return filePath; } void CUtil::sort_by_repeat(std::vector& vec) { std::size_t len1 = 0; std::size_t len2 = 0; std::size_t cur = 0; auto compare = [&](const std::string& str1, const std::string& str2) { len1 = str1.size(); len2 = str2.size(); if (cur >= len1 || cur >= len2) { return len1 > len2; } return str1[cur] > str2[cur]; }; std::size_t max_len = 0; for (const auto& data : vec) { max_len = data.size() > max_len ? data.size() : max_len; } for (cur = 0; cur < max_len; ++cur) { std::sort(vec.begin(), vec.end(), compare); } } #ifdef _WIN32 std::string CUtil::utf8_to_gbk(const std::string& utf8_str) { // UTF-8 to Wide Char (UTF-16) int wide_char_len = MultiByteToWideChar(CP_UTF8, 0, utf8_str.c_str(), -1, nullptr, 0); if (wide_char_len == 0) { return ""; } std::wstring wide_str(wide_char_len, 0); MultiByteToWideChar(CP_UTF8, 0, utf8_str.c_str(), -1, &wide_str[0], wide_char_len); // Wide Char (UTF-16) to GBK int gbk_len = WideCharToMultiByte(CP_ACP, 0, wide_str.c_str(), -1, nullptr, 0, nullptr, nullptr); if (gbk_len == 0) { return ""; } std::string gbk_str(gbk_len, 0); WideCharToMultiByte(CP_ACP, 0, wide_str.c_str(), -1, &gbk_str[0], gbk_len, nullptr, nullptr); return gbk_str; } #else std::string CUtil::utf8_to_gbk(const std::string& utf8_str) { return utf8_str; } #endif std::vector CUtil::splitString(const std::string& input, const std::string& delimiter) { std::vector tokens; size_t pos = 0; std::string backup = input; std::string token; while ((pos = backup.find(delimiter)) != std::string::npos) { token = backup.substr(0, pos); tokens.push_back(token); backup.erase(0, pos + delimiter.length()); } // Push the remaining part after the last delimiter tokens.push_back(backup); return tokens; }