JumpList, eine der Funktionen, die nur in Windows (Version 7 und höher) vorhanden sind. In diesem Blatt können Sie insbesondere Links zu den zuletzt geöffneten Dateien in der Anwendung hinterlegen.
Schritt-für-Schritt-Anleitung
Um diese Funktion nutzen zu können, müssen Sie
Schließen Sie das Modul an
QT += winextras
Bibliothek verbinden
#include <QtWinExtras>
Aktivieren Sie den entsprechenden JumpList-Abschnitt
QWinJumpList jumplist; jumplist.recent()->setVisible(true);
Ordnen Sie mit der Funktion alle erforderlichen Dateierweiterungen unserer Anwendung zu
static void associateFileTypes(const QStringList &fileTypes) { QString displayName = QGuiApplication::applicationDisplayName(); QString filePath = QCoreApplication::applicationFilePath(); QString fileName = QFileInfo(filePath).fileName(); QSettings settings("HKEY_CURRENT_USER\\Software\\Classes\\Applications\\" + fileName, QSettings::NativeFormat); settings.setValue("FriendlyAppName", displayName); settings.beginGroup("SupportedTypes"); foreach (const QString& fileType, fileTypes) settings.setValue(fileType, QString()); settings.endGroup(); settings.beginGroup("shell"); settings.beginGroup("open"); settings.setValue("FriendlyAppName", displayName); settings.beginGroup("Command"); settings.setValue(".", QChar('"') + QDir::toNativeSeparators(filePath) + QString("\" \"%1\"")); }
Was in der Hauptsache bequem zu bedienen ist
QApplication a(argc, argv); a.setApplicationDisplayName("QtWinExtras Test"); associateFileTypes(QStringList(".txt"));
Wenn Sie jetzt eine neue Datei öffnen, wird ein Link dazu zum letzten JumpList-Abschnitt hinzugefügt.
Wenn Sie auf einen der angezeigten Links klicken, startet unsere Anwendung mit dem Dateinamen als zweitem Parameter (argv [1]). Bei einer solchen Konfiguration ist es sinnvoll, die Hauptfunktion so zu ändern, dass die ausgewählte Datei geöffnet wird.
if(argc == 2) w.open(QString::fromLocal8Bit(argv[1]).replace(QString("\\"),QString("/")));
Es kann auch implementiert werden, wann beim Start der Anwendung geprüft wird, ob eine Kopie davon läuft. Wenn eine solche Kopie gefunden wird, sendet die Anwendung den Namen der ausgewählten Datei an sie und beendet ihre Arbeit. Ich habe die folgende Implementierung geschrieben, bei der der Name der Datei in die Registrierung geschrieben wird.
HANDLE hCorvetEvent = CreateEventA(NULL, FALSE, FALSE, ("winExJumpList")); if (GetLastError() == ERROR_ALREADY_EXISTS) { if(argc == 2) { QSettings *settings; settings = new QSettings("Company", "my programm"); settings->setValue("AddFile", QString::fromLocal8Bit(argv[1]).replace(QString("\\"),QString("/") ) ); CloseHandle(hCorvetEvent); } return 0; }
Das Programm verwendet eine Timer-basierte Funktion, um die Registrierungsänderung zu überwachen und die hinzugefügte Datei zu öffnen.
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::openFile); QTimer *openFile = new QTimer; connect(openFile, &QTimer::timeout, this, &MainWindow::nextFile); openFile->start(500); void MainWindow::nextFile() { QSettings *settings; settings = new QSettings("Company", "my programm"); QString s = settings->value("AddFile").toString(); if(!s.isEmpty()) { settings->setValue("AddFile", ""); open(s); } }
Natürlich sehen Sie die Arbeit des Programms, nachdem Sie der kompilierten Exe-Datei die für den Snack erforderlichen Bibliotheken hinzugefügt haben.
Unless I right click on the Recent items and select to open the txt file through a second context menu as opposed to a straight double click of the item.