我在 VMWare 工作站下的不同虚拟机上运行两个版本的 Ubuntu:16.04 和 18.04。
我真的不喜欢 18.05 上的文件打开/保存界面,我喜欢 16.04 上的界面。我认为问题在于运行的 Qt 版本不同。
在 16.04 上我似乎正在运行 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:
我的假设正确吗?打开/保存 GUI 不同的原因是由于 qt 版本的差异还是操作系统 (16.04 v 18.04) 版本的差异?
如果 Qt 版本有差异,如何在我的 18.04 VM 中将 Qt 版本从 5.9.5 恢复回 5.5.1?
答案1
第二种选择。
我能想到的唯一确保它按您的要求工作的方法是修改源代码并自行构建 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/
一旦执行该命令,图标就会正确显示。
答案2
我不确定为什么,但看起来使用 PPA 安装时应用程序 GUI 的行为与以 snap 方式安装时的行为不同。我在另一个应用程序中也看到过这种情况。
如果您执行以下步骤,您最终应该会在 Ubuntu 18.04 中使用非原生的打开/保存对话框来使用 notepadqq。
卸载当前的notepadqq
sudo apt remove notepadqq
通过删除 PPA 来清理系统
sudo add-apt-repository -r ppa:notepadqq-team/notepadqq
sudo apt update
快速安装 notepadqq
sudo snap install notepadqq
启动 notepadqq 并检查打开/保存对话框。在我的系统上,出现了非本机对话框。