Как запустить определенную версию Qt с Notepadqq

У меня есть две версии Ubuntu, работающие на разных виртуальных машинах под рабочей станцией VMWare: 16.04 и 18.04.

Мне очень не нравится интерфейс открытия / сохранения файлов, который у меня есть на 18.05, и мне нравится тот, который у меня есть на 16.04. Я предполагаю, что проблема заключается в разных версиях Qt.

16 апреля у меня, кажется, работает Notepadqq v.1.4.2 и Qt 5.5.1

Кажется, 18.04 я запускаю Notepadqq v.1.4.2 и Qt 5.9.5

То есть та же версия Notepadqq, но разные версии Qt.

Когда я делаю

whereis qt

в обеих виртуальных машинах я ничего не получаю обратно. Все что я вижу

qt:

Правильно ли мое предположение? Является ли причиной различного графического интерфейса открытия / сохранения файлов различие в версиях qt или различие в версиях ОС (16.04 против 18.04)?

Если есть разница в версиях Qt, как мне перейти с версии 5.9.5 Qt на 5.5.1 в моей виртуальной машине 18.04?

2 ответа

Решение

Второй вариант.

Единственный способ убедиться, что это работает так, как вам нужно, - это изменить исходный код и самостоятельно собрать notepadqq. Это потому, что Qt решает, будет ли использоваться собственный диалог, если разработчик не переопределит это поведение (что здесь не так).

Эти шаги проведут вас через этот процесс.

Удалить оснастку notepadqq

sudo snap remove notepadqq

Установить предпосылки

sudo apt install git build-essential
sudo apt install qt5-default qttools5-dev-tools qtwebengine5-dev libqt5websockets5-dev libqt5svg5 libqt5svg5-dev

Загрузите источник notepadqq

cd ~/Downloads
git clone --recursive https://github.com/notepadqq/notepadqq.git

Создать файл патча

Я написал файл патча, чтобы было легче вносить необходимые изменения. Этот файл патча заставит использовать не родной диалог.

Откройте новый файл в текстовом редакторе, скопируйте следующий текст и вставьте его в текстовый редактор. Сохранить документ как notepadqq.patch в ~/Downloads, Убедитесь, что вы скопировали весь файл точно.

--- mainwindow.cpp  2018-07-29 13:42:51.758184000 +0100
+++ mainwindow_patched.cpp  2018-07-29 13:53:06.888952000 +0100
@@ -845,7 +845,7 @@
                                 tr("Open"),
                                 defaultUrl,
                                 tr("All files (*)"),
-                                0, 0);
+                                0, QFileDialog::DontUseNativeDialog);

     if (fileNames.empty())
         return;
@@ -866,7 +866,7 @@
     BackupServicePauser bsp; bsp.pause();

     // Select directory
-    QString folder = QFileDialog::getExistingDirectory(this, tr("Open Folder"), defaultUrl.toLocalFile(), 0);
+    QString folder = QFileDialog::getExistingDirectory(this, tr("Open Folder"), defaultUrl.toLocalFile(), QFileDialog::DontUseNativeDialog);
     if (folder.isEmpty())
         return;

@@ -1052,7 +1052,7 @@
                            tr("Save as"),
                            getSaveDialogDefaultFileName(tabWidget, tab).toLocalFile(),
                            tr("Any file (*)"),
-                           nullptr, nullptr);
+                           nullptr, QFileDialog::DontUseNativeDialog);

     if (filename != "") {
         m_settings.General.setLastSelectedDir(QFileInfo(filename).absolutePath());
@@ -2463,7 +2463,7 @@
     // See https://github.com/notepadqq/notepadqq/issues/654
     BackupServicePauser bsp; bsp.pause();

-    QString file = QFileDialog::getOpenFileName(this, tr("Extension"), QString(), "Notepadqq extensions (*.nqqext)");
+    QString file = QFileDialog::getOpenFileName(this, tr("Extension"), QString(), "Notepadqq extensions (*.nqqext)", nullptr, QFileDialog::DontUseNativeDialog);
     if (!file.isNull()) {
         Extensions::InstallExtension *installExt = new Extensions::InstallExtension(file, this);
         installExt->exec();
@@ -2547,7 +2547,7 @@
                            tr("Open Session..."),
                            recentFolder,
                            tr("Session file (*.xml);;Any file (*)"),
-                           0, 0);
+                           0, QFileDialog::DontUseNativeDialog);

     if (filePath.isEmpty())
         return;
@@ -2574,6 +2574,7 @@
     dialog.setFileMode(QFileDialog::AnyFile);
     dialog.setDefaultSuffix("xml");
     dialog.setAcceptMode(QFileDialog::AcceptSave);
+    dialog.setOption(QFileDialog::DontUseNativeDialog);

     if (!dialog.exec())
         return;

Применить файл патча

cd ~/Downloads
patch ~/Downloads/notepadqq/src/ui/mainwindow.cpp notepadqq.patch

Сборка и установка notepadqq

cd ~/Downloads/notepadqq
./configure --prefix /usr
make
sudo make install

Чтобы команда nqq работала (необязательно)

sudo ln -s /usr/bin/notepadqq /usr/bin/nqq

Запустите notepadqq. Теперь у вас должно быть то, что было раньше, но диалог открытия / сохранения не должен быть нативным.

Я заметил, что значок notepadqq не появляется. Если я узнаю, как это исправить, я обновлю ответ.

Надеюсь, это поможет.

Обновление для значка

Похоже, что кэш иконок должен быть обновлен следующим образом.

sudo gtk-update-icon-cache /usr/share/icons/hicolor/

Значок отображается правильно после выполнения этой команды.

Я не уверен на 100%, почему, но похоже, что графический интерфейс приложения ведет себя по-разному при установке с использованием PPA по сравнению с тем, когда он устанавливается как оснастка. Я видел это с другим приложением.

Если вы выполните следующие шаги, вы должны получить notepadqq, используя не собственный диалог открытия / сохранения в Ubuntu 18.04.

Удалить текущий notepadqq

sudo apt remove notepadqq

Очистите систему, удалив PPA

sudo add-apt-repository -r ppa:notepadqq-team/notepadqq
sudo apt update

Установите notepadqq как оснастку

sudo snap install notepadqq

Запустите notepadqq и проверьте диалог открытия / сохранения. В моей системе появляется не родной диалог.

Другие вопросы по тегам