Port yuzu commit: "yuzu/CMakeLists: Disable implicit QString co… (#5074)
* yuzu/CMakeLists: Disable implicit QString conversions Now that all of our code is compilable with implicit QString conversions, we can enforce it at compile-time by disabling them. Co-Authored-By: Mat M. <lioncash@users.noreply.github.com> * citra_qt: Remove lots of implicit QString conversions Co-authored-by: Mat M. <mathew1800@gmail.com>
This commit is contained in:
		| @@ -244,6 +244,10 @@ target_compile_definitions(citra-qt PRIVATE | |||||||
|  |  | ||||||
|     # Disable implicit QString->QUrl conversions to enforce use of proper resolving functions. |     # Disable implicit QString->QUrl conversions to enforce use of proper resolving functions. | ||||||
|     -DQT_NO_URL_CAST_FROM_STRING |     -DQT_NO_URL_CAST_FROM_STRING | ||||||
|  |  | ||||||
|  |     # Disable implicit conversions from/to C strings | ||||||
|  |     -DQT_NO_CAST_FROM_ASCII | ||||||
|  |     -DQT_NO_CAST_TO_ASCII | ||||||
| ) | ) | ||||||
|  |  | ||||||
| if (CITRA_ENABLE_COMPATIBILITY_REPORTING) | if (CITRA_ENABLE_COMPATIBILITY_REPORTING) | ||||||
|   | |||||||
| @@ -190,7 +190,9 @@ GRenderWindow::GRenderWindow(QWidget* parent_, EmuThread* emu_thread) | |||||||
|     : QWidget(parent_), emu_thread(emu_thread) { |     : QWidget(parent_), emu_thread(emu_thread) { | ||||||
|  |  | ||||||
|     setWindowTitle(QStringLiteral("Citra %1 | %2-%3") |     setWindowTitle(QStringLiteral("Citra %1 | %2-%3") | ||||||
|                        .arg(Common::g_build_name, Common::g_scm_branch, Common::g_scm_desc)); |                        .arg(QString::fromUtf8(Common::g_build_name), | ||||||
|  |                             QString::fromUtf8(Common::g_scm_branch), | ||||||
|  |                             QString::fromUtf8(Common::g_scm_desc))); | ||||||
|     setAttribute(Qt::WA_AcceptTouchEvents); |     setAttribute(Qt::WA_AcceptTouchEvents); | ||||||
|     auto layout = new QHBoxLayout(this); |     auto layout = new QHBoxLayout(this); | ||||||
|     layout->setMargin(0); |     layout->setMargin(0); | ||||||
|   | |||||||
| @@ -36,14 +36,16 @@ const std::string StillImageCameraFactory::GetFilePath() const { | |||||||
|         return last_path; |         return last_path; | ||||||
|     } |     } | ||||||
|     QList<QByteArray> types = QImageReader::supportedImageFormats(); |     QList<QByteArray> types = QImageReader::supportedImageFormats(); | ||||||
|     QList<QString> temp_filters; |     QStringList temp_filters; | ||||||
|     for (QByteArray type : types) { |     for (QByteArray type : types) { | ||||||
|         temp_filters << QString("*." + QString(type)); |         temp_filters << QStringLiteral("*.%1").arg(QString::fromUtf8(type)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     QString filter = QObject::tr("Supported image files (%1)").arg(temp_filters.join(" ")); |     QString filter = | ||||||
|  |         QObject::tr("Supported image files (%1)").arg(temp_filters.join(QLatin1Char{' '})); | ||||||
|     last_path = |     last_path = | ||||||
|         QFileDialog::getOpenFileName(nullptr, QObject::tr("Open File"), ".", filter).toStdString(); |         QFileDialog::getOpenFileName(nullptr, QObject::tr("Open File"), QStringLiteral("."), filter) | ||||||
|  |             .toStdString(); | ||||||
|     return last_path; |     return last_path; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -54,7 +54,7 @@ void CheatDialog::LoadCheats() { | |||||||
|     for (size_t i = 0; i < cheats.size(); i++) { |     for (size_t i = 0; i < cheats.size(); i++) { | ||||||
|         QCheckBox* enabled = new QCheckBox(); |         QCheckBox* enabled = new QCheckBox(); | ||||||
|         enabled->setChecked(cheats[i]->IsEnabled()); |         enabled->setChecked(cheats[i]->IsEnabled()); | ||||||
|         enabled->setStyleSheet("margin-left:7px;"); |         enabled->setStyleSheet(QStringLiteral("margin-left:7px;")); | ||||||
|         ui->tableCheats->setItem(i, 0, new QTableWidgetItem()); |         ui->tableCheats->setItem(i, 0, new QTableWidgetItem()); | ||||||
|         ui->tableCheats->setCellWidget(i, 0, enabled); |         ui->tableCheats->setCellWidget(i, 0, enabled); | ||||||
|         ui->tableCheats->setItem( |         ui->tableCheats->setItem( | ||||||
| @@ -90,7 +90,7 @@ bool CheatDialog::SaveCheat(int row) { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Check if the cheat lines are valid |     // Check if the cheat lines are valid | ||||||
|     auto code_lines = ui->textCode->toPlainText().split("\n", QString::SkipEmptyParts); |     auto code_lines = ui->textCode->toPlainText().split(QLatin1Char{'\n'}, QString::SkipEmptyParts); | ||||||
|     for (int i = 0; i < code_lines.size(); ++i) { |     for (int i = 0; i < code_lines.size(); ++i) { | ||||||
|         Cheats::GatewayCheat::CheatLine cheat_line(code_lines[i].toStdString()); |         Cheats::GatewayCheat::CheatLine cheat_line(code_lines[i].toStdString()); | ||||||
|         if (cheat_line.valid) |         if (cheat_line.valid) | ||||||
| @@ -195,9 +195,9 @@ void CheatDialog::OnDeleteCheat() { | |||||||
|  |  | ||||||
|     LoadCheats(); |     LoadCheats(); | ||||||
|     if (cheats.empty()) { |     if (cheats.empty()) { | ||||||
|         ui->lineName->setText(""); |         ui->lineName->clear(); | ||||||
|         ui->textCode->setPlainText(""); |         ui->textCode->clear(); | ||||||
|         ui->textNotes->setPlainText(""); |         ui->textNotes->clear(); | ||||||
|         ui->lineName->setEnabled(false); |         ui->lineName->setEnabled(false); | ||||||
|         ui->textCode->setEnabled(false); |         ui->textCode->setEnabled(false); | ||||||
|         ui->textNotes->setEnabled(false); |         ui->textNotes->setEnabled(false); | ||||||
| @@ -231,11 +231,11 @@ void CheatDialog::OnAddCheat() { | |||||||
|  |  | ||||||
|     // create a dummy item |     // create a dummy item | ||||||
|     ui->tableCheats->setItem(row, 1, new QTableWidgetItem(tr("[new cheat]"))); |     ui->tableCheats->setItem(row, 1, new QTableWidgetItem(tr("[new cheat]"))); | ||||||
|     ui->tableCheats->setItem(row, 2, new QTableWidgetItem("")); |     ui->tableCheats->setItem(row, 2, new QTableWidgetItem(QString{})); | ||||||
|     ui->lineName->setText(""); |     ui->lineName->clear(); | ||||||
|     ui->lineName->setPlaceholderText(tr("[new cheat]")); |     ui->lineName->setPlaceholderText(tr("[new cheat]")); | ||||||
|     ui->textCode->setPlainText(""); |     ui->textCode->clear(); | ||||||
|     ui->textNotes->setPlainText(""); |     ui->textNotes->clear(); | ||||||
|     ui->lineName->setEnabled(true); |     ui->lineName->setEnabled(true); | ||||||
|     ui->textCode->setEnabled(true); |     ui->textCode->setEnabled(true); | ||||||
|     ui->textNotes->setEnabled(true); |     ui->textNotes->setEnabled(true); | ||||||
|   | |||||||
| @@ -116,7 +116,8 @@ void Config::ReadAudioValues() { | |||||||
|     Settings::values.mic_input_type = static_cast<Settings::MicInputType>( |     Settings::values.mic_input_type = static_cast<Settings::MicInputType>( | ||||||
|         ReadSetting(QStringLiteral("mic_input_type"), 0).toInt()); |         ReadSetting(QStringLiteral("mic_input_type"), 0).toInt()); | ||||||
|     Settings::values.mic_input_device = |     Settings::values.mic_input_device = | ||||||
|         ReadSetting(QStringLiteral("mic_input_device"), Frontend::Mic::default_device_name) |         ReadSetting(QStringLiteral("mic_input_device"), | ||||||
|  |                     QString::fromUtf8(Frontend::Mic::default_device_name)) | ||||||
|             .toString() |             .toString() | ||||||
|             .toStdString(); |             .toStdString(); | ||||||
|  |  | ||||||
| @@ -635,7 +636,7 @@ void Config::SaveAudioValues() { | |||||||
|     WriteSetting(QStringLiteral("volume"), Settings::values.volume, 1.0f); |     WriteSetting(QStringLiteral("volume"), Settings::values.volume, 1.0f); | ||||||
|     WriteSetting(QStringLiteral("mic_input_device"), |     WriteSetting(QStringLiteral("mic_input_device"), | ||||||
|                  QString::fromStdString(Settings::values.mic_input_device), |                  QString::fromStdString(Settings::values.mic_input_device), | ||||||
|                  Frontend::Mic::default_device_name); |                  QString::fromUtf8(Frontend::Mic::default_device_name)); | ||||||
|     WriteSetting(QStringLiteral("mic_input_type"), |     WriteSetting(QStringLiteral("mic_input_type"), | ||||||
|                  static_cast<int>(Settings::values.mic_input_type), 0); |                  static_cast<int>(Settings::values.mic_input_type), 0); | ||||||
|  |  | ||||||
| @@ -1006,7 +1007,7 @@ QVariant Config::ReadSetting(const QString& name) const { | |||||||
|  |  | ||||||
| QVariant Config::ReadSetting(const QString& name, const QVariant& default_value) const { | QVariant Config::ReadSetting(const QString& name, const QVariant& default_value) const { | ||||||
|     QVariant result; |     QVariant result; | ||||||
|     if (qt_config->value(name + "/default", false).toBool()) { |     if (qt_config->value(name + QStringLiteral("/default"), false).toBool()) { | ||||||
|         result = default_value; |         result = default_value; | ||||||
|     } else { |     } else { | ||||||
|         result = qt_config->value(name, default_value); |         result = qt_config->value(name, default_value); | ||||||
| @@ -1020,7 +1021,7 @@ void Config::WriteSetting(const QString& name, const QVariant& value) { | |||||||
|  |  | ||||||
| void Config::WriteSetting(const QString& name, const QVariant& value, | void Config::WriteSetting(const QString& name, const QVariant& value, | ||||||
|                           const QVariant& default_value) { |                           const QVariant& default_value) { | ||||||
|     qt_config->setValue(name + "/default", value == default_value); |     qt_config->setValue(name + QStringLiteral("/default"), value == default_value); | ||||||
|     qt_config->setValue(name, value); |     qt_config->setValue(name, value); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -183,8 +183,9 @@ void ConfigureCamera::StartPreviewing() { | |||||||
|     ui->preview_button->setHidden(true); |     ui->preview_button->setHidden(true); | ||||||
|     preview_width = ui->preview_box->size().width(); |     preview_width = ui->preview_box->size().width(); | ||||||
|     preview_height = preview_width * 0.75; |     preview_height = preview_width * 0.75; | ||||||
|     ui->preview_box->setToolTip(tr("Resolution: ") + QString::number(preview_width) + "*" + |     ui->preview_box->setToolTip( | ||||||
|                                 QString::number(preview_height)); |         tr("Resolution: %1*%2") | ||||||
|  |             .arg(QString::number(preview_width), QString::number(preview_height))); | ||||||
|     // Load previewing camera |     // Load previewing camera | ||||||
|     previewing_camera = Camera::CreateCameraPreview( |     previewing_camera = Camera::CreateCameraPreview( | ||||||
|         camera_name[camera_selection], camera_config[camera_selection], preview_width, |         camera_name[camera_selection], camera_config[camera_selection], preview_width, | ||||||
| @@ -270,7 +271,7 @@ void ConfigureCamera::OnToolButtonClicked() { | |||||||
|     QList<QByteArray> types = QImageReader::supportedImageFormats(); |     QList<QByteArray> types = QImageReader::supportedImageFormats(); | ||||||
|     QList<QString> temp_filters; |     QList<QString> temp_filters; | ||||||
|     for (const QByteArray& type : types) { |     for (const QByteArray& type : types) { | ||||||
|         temp_filters << QString("*." + QString::fromUtf8(type)); |         temp_filters << QStringLiteral("*.%1").arg(QString::fromUtf8(type)); | ||||||
|     } |     } | ||||||
|     QString filter = tr("Supported image files (%1)").arg(temp_filters.join(QStringLiteral(" "))); |     QString filter = tr("Supported image files (%1)").arg(temp_filters.join(QStringLiteral(" "))); | ||||||
|     QString path = QFileDialog::getOpenFileName(this, tr("Open File"), QStringLiteral("."), filter); |     QString path = QFileDialog::getOpenFileName(this, tr("Open File"), QStringLiteral("."), filter); | ||||||
|   | |||||||
| @@ -72,11 +72,11 @@ void ConfigureEnhancements::updateShaders(Settings::StereoRenderOption stereo_op | |||||||
|     ui->shader_combobox->clear(); |     ui->shader_combobox->clear(); | ||||||
|  |  | ||||||
|     if (stereo_option == Settings::StereoRenderOption::Anaglyph) |     if (stereo_option == Settings::StereoRenderOption::Anaglyph) | ||||||
|         ui->shader_combobox->addItem("dubois (builtin)"); |         ui->shader_combobox->addItem(QStringLiteral("dubois (builtin)")); | ||||||
|     else if (stereo_option == Settings::StereoRenderOption::Interlaced) |     else if (stereo_option == Settings::StereoRenderOption::Interlaced) | ||||||
|         ui->shader_combobox->addItem("horizontal (builtin)"); |         ui->shader_combobox->addItem(QStringLiteral("horizontal (builtin)")); | ||||||
|     else |     else | ||||||
|         ui->shader_combobox->addItem("none (builtin)"); |         ui->shader_combobox->addItem(QStringLiteral("none (builtin)")); | ||||||
|  |  | ||||||
|     ui->shader_combobox->setCurrentIndex(0); |     ui->shader_combobox->setCurrentIndex(0); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -178,7 +178,7 @@ QString WaitTreeThread::GetText() const { | |||||||
|     QString pc_info = tr(" PC = 0x%1 LR = 0x%2") |     QString pc_info = tr(" PC = 0x%1 LR = 0x%2") | ||||||
|                           .arg(thread.context->GetProgramCounter(), 8, 16, QLatin1Char('0')) |                           .arg(thread.context->GetProgramCounter(), 8, 16, QLatin1Char('0')) | ||||||
|                           .arg(thread.context->GetLinkRegister(), 8, 16, QLatin1Char('0')); |                           .arg(thread.context->GetLinkRegister(), 8, 16, QLatin1Char('0')); | ||||||
|     return WaitTreeWaitObject::GetText() + pc_info + " (" + status + ") "; |     return QStringLiteral("%1%2 (%3) ").arg(WaitTreeWaitObject::GetText(), pc_info, status); | ||||||
| } | } | ||||||
|  |  | ||||||
| QColor WaitTreeThread::GetColor() const { | QColor WaitTreeThread::GetColor() const { | ||||||
|   | |||||||
| @@ -120,14 +120,15 @@ void GameListWorker::run() { | |||||||
|         if (game_dir.path == QStringLiteral("INSTALLED")) { |         if (game_dir.path == QStringLiteral("INSTALLED")) { | ||||||
|             QString games_path = |             QString games_path = | ||||||
|                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)) + |                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)) + | ||||||
|                 "Nintendo " |                 QStringLiteral("Nintendo " | ||||||
|                 "3DS/00000000000000000000000000000000/" |                                "3DS/00000000000000000000000000000000/" | ||||||
|                 "00000000000000000000000000000000/title/00040000"; |                                "00000000000000000000000000000000/title/00040000"); | ||||||
|             QString demos_path = |             QString demos_path = | ||||||
|                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)) + |                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)) + | ||||||
|                 "Nintendo " |                 QStringLiteral( | ||||||
|                 "3DS/00000000000000000000000000000000/00000000000000000000000000000000/title/" |                     "Nintendo " | ||||||
|                 "00040002"; |                     "3DS/00000000000000000000000000000000/00000000000000000000000000000000/title/" | ||||||
|  |                     "00040002"); | ||||||
|             watch_list.append(games_path); |             watch_list.append(games_path); | ||||||
|             watch_list.append(demos_path); |             watch_list.append(demos_path); | ||||||
|             auto* const game_list_dir = new GameListDir(game_dir, GameListItemType::InstalledDir); |             auto* const game_list_dir = new GameListDir(game_dir, GameListItemType::InstalledDir); | ||||||
| @@ -137,7 +138,7 @@ void GameListWorker::run() { | |||||||
|         } else if (game_dir.path == QStringLiteral("SYSTEM")) { |         } else if (game_dir.path == QStringLiteral("SYSTEM")) { | ||||||
|             QString path = |             QString path = | ||||||
|                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)) + |                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)) + | ||||||
|                 "00000000000000000000000000000000/title/00040010"; |                 QStringLiteral("00000000000000000000000000000000/title/00040010"); | ||||||
|             watch_list.append(path); |             watch_list.append(path); | ||||||
|             auto* const game_list_dir = new GameListDir(game_dir, GameListItemType::SystemDir); |             auto* const game_list_dir = new GameListDir(game_dir, GameListItemType::SystemDir); | ||||||
|             emit DirEntryReady(game_list_dir); |             emit DirEntryReady(game_list_dir); | ||||||
|   | |||||||
| @@ -134,7 +134,7 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) { | |||||||
|     } |     } | ||||||
|     std::string title; |     std::string title; | ||||||
|     if (loader.ReadTitle(title) == Loader::ResultStatus::Success) { |     if (loader.ReadTitle(title) == Loader::ResultStatus::Success) { | ||||||
|         ui->title->setText(QString("Now Loading\n") + QString::fromStdString(title)); |         ui->title->setText(tr("Now Loading\n%1").arg(QString::fromStdString(title))); | ||||||
|     } |     } | ||||||
|     eta_shown = false; |     eta_shown = false; | ||||||
|     OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0); |     OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0); | ||||||
| @@ -150,7 +150,7 @@ void LoadingScreen::OnLoadProgress(VideoCore::LoadCallbackStage stage, std::size | |||||||
|     const auto now = high_resolution_clock::now(); |     const auto now = high_resolution_clock::now(); | ||||||
|     // reset the timer if the stage changes |     // reset the timer if the stage changes | ||||||
|     if (stage != previous_stage) { |     if (stage != previous_stage) { | ||||||
|         ui->progress_bar->setStyleSheet(progressbar_style.at(stage)); |         ui->progress_bar->setStyleSheet(QString::fromUtf8(progressbar_style.at(stage))); | ||||||
|         // Hide the progress bar during the prepare stage |         // Hide the progress bar during the prepare stage | ||||||
|         if (stage == VideoCore::LoadCallbackStage::Prepare) { |         if (stage == VideoCore::LoadCallbackStage::Prepare) { | ||||||
|             ui->progress_bar->hide(); |             ui->progress_bar->hide(); | ||||||
|   | |||||||
| @@ -637,7 +637,10 @@ void GMainWindow::ConnectMenuEvents() { | |||||||
|             ->key()); |             ->key()); | ||||||
|     ui.action_Screen_Layout_Swap_Screens->setShortcutContext(Qt::WidgetWithChildrenShortcut); |     ui.action_Screen_Layout_Swap_Screens->setShortcutContext(Qt::WidgetWithChildrenShortcut); | ||||||
|     ui.action_Screen_Layout_Upright_Screens->setShortcut( |     ui.action_Screen_Layout_Upright_Screens->setShortcut( | ||||||
|         hotkey_registry.GetHotkey("Main Window", "Rotate Screens Upright", this)->key()); |         hotkey_registry | ||||||
|  |             .GetHotkey(QStringLiteral("Main Window"), QStringLiteral("Rotate Screens Upright"), | ||||||
|  |                        this) | ||||||
|  |             ->key()); | ||||||
|     ui.action_Screen_Layout_Upright_Screens->setShortcutContext(Qt::WidgetWithChildrenShortcut); |     ui.action_Screen_Layout_Upright_Screens->setShortcutContext(Qt::WidgetWithChildrenShortcut); | ||||||
|     connect(ui.action_Fullscreen, &QAction::triggered, this, &GMainWindow::ToggleFullscreen); |     connect(ui.action_Fullscreen, &QAction::triggered, this, &GMainWindow::ToggleFullscreen); | ||||||
|     connect(ui.action_Screen_Layout_Default, &QAction::triggered, this, |     connect(ui.action_Screen_Layout_Default, &QAction::triggered, this, | ||||||
| @@ -1169,7 +1172,7 @@ void GMainWindow::OnGameListNavigateToGamedbEntry(u64 program_id, | |||||||
|     if (it != compatibility_list.end()) |     if (it != compatibility_list.end()) | ||||||
|         directory = it->second.second; |         directory = it->second.second; | ||||||
|  |  | ||||||
|     QDesktopServices::openUrl(QUrl("https://citra-emu.org/game/" + directory)); |     QDesktopServices::openUrl(QUrl(QStringLiteral("https://citra-emu.org/game/") + directory)); | ||||||
| } | } | ||||||
|  |  | ||||||
| void GMainWindow::OnGameListOpenDirectory(const QString& directory) { | void GMainWindow::OnGameListOpenDirectory(const QString& directory) { | ||||||
| @@ -1232,7 +1235,7 @@ void GMainWindow::OnMenuLoadFile() { | |||||||
| void GMainWindow::OnMenuInstallCIA() { | void GMainWindow::OnMenuInstallCIA() { | ||||||
|     QStringList filepaths = QFileDialog::getOpenFileNames( |     QStringList filepaths = QFileDialog::getOpenFileNames( | ||||||
|         this, tr("Load Files"), UISettings::values.roms_path, |         this, tr("Load Files"), UISettings::values.roms_path, | ||||||
|         tr("3DS Installation File (*.CIA*)") + ";;" + tr("All Files (*.*)")); |         tr("3DS Installation File (*.CIA*)") + QStringLiteral(";;") + tr("All Files (*.*)")); | ||||||
|     if (filepaths.isEmpty()) |     if (filepaths.isEmpty()) | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| #include "citra_qt/util/util.h" | #include "citra_qt/util/util.h" | ||||||
|  |  | ||||||
| QFont GetMonospaceFont() { | QFont GetMonospaceFont() { | ||||||
|     QFont font("monospace"); |     QFont font(QStringLiteral("monospace")); | ||||||
|     // Automatic fallback to a monospace font on on platforms without a font called "monospace" |     // Automatic fallback to a monospace font on on platforms without a font called "monospace" | ||||||
|     font.setStyleHint(QFont::Monospace); |     font.setStyleHint(QFont::Monospace); | ||||||
|     font.setFixedPitch(true); |     font.setFixedPitch(true); | ||||||
| @@ -18,12 +18,12 @@ QFont GetMonospaceFont() { | |||||||
| QString ReadableByteSize(qulonglong size) { | QString ReadableByteSize(qulonglong size) { | ||||||
|     static const std::array<const char*, 6> units = {"B", "KiB", "MiB", "GiB", "TiB", "PiB"}; |     static const std::array<const char*, 6> units = {"B", "KiB", "MiB", "GiB", "TiB", "PiB"}; | ||||||
|     if (size == 0) |     if (size == 0) | ||||||
|         return "0"; |         return QStringLiteral("0"); | ||||||
|     int digit_groups = std::min<int>(static_cast<int>(std::log10(size) / std::log10(1024)), |     int digit_groups = std::min<int>(static_cast<int>(std::log10(size) / std::log10(1024)), | ||||||
|                                      static_cast<int>(units.size())); |                                      static_cast<int>(units.size())); | ||||||
|     return QString("%L1 %2") |     return QStringLiteral("%L1 %2") | ||||||
|         .arg(size / std::pow(1024, digit_groups), 0, 'f', 1) |         .arg(size / std::pow(1024, digit_groups), 0, 'f', 1) | ||||||
|         .arg(units[digit_groups]); |         .arg(QString::fromUtf8(units[digit_groups])); | ||||||
| } | } | ||||||
|  |  | ||||||
| QPixmap CreateCirclePixmapFromColor(const QColor& color) { | QPixmap CreateCirclePixmapFromColor(const QColor& color) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user