Некоторое время назад я написал несколько статей об использовании библиотеки QtWinExtras, которая открывает доступ к специальным функциям, доступным только для Windows. Теперь хочу сказать пару слов о том, как повторить тоже с помощью QML. Для этого нам нужно создать проект Qt Quick, подключить в проекте модуль winextras
import QtWinExtras 1.0
И использовать 3 объекта: TaskbarButton для создания индикатора выполнения и управления им, ThumbnailToolBar для работы с кнопками на всплывающем окне панели задач и JumpList (для работы с jumpList). Также добавьте FileDialog для полноценной работы jumpList.
Для TaskbarButton нужно установить свойства id (для доступа к этому объекту извне), progress.visible: true. Кроме того, вы можете установить значок overlay.iconSource.
В ThumbnailToolBar создаем кнопки ThumbnailToolButton (от одной до семи), устанавливаем иконки и пишем обработку нажатия.
В JumpList раздел «Последние» виден для отображения последних открытых файлов, а раздел «Часто» — для отображения часто открываемых файлов.
JumpList { id: jumpList recent.visible: true frequent.visible: true }
Не забывайте, что расширения файлов, попадающие в jumpList, должны быть зарегистрированы в реестре. Поэтому добавьте в основной файл функцию AssociateFileTypes(), как показано в предыдущей статье. .
Еще одна любопытная возможность — настройка прозрачности окна. Для этого вам понадобится объект DwmFeatures. Его свойство blurBehindEnabled делает окно прозрачным, если его значение равно true. Если вы установите значение false, цвет фона станет черным. Также отмечу, что прозрачность можно задать с помощью свойства opacity объекта Window. Отличается от blurBehindEnabled тем, что последний может иметь только 2 состояния (прозрачное и непрозрачное) и делает прозрачной только основную часть окна (без размещенных на ней виджетов), а opacity задает степень прозрачности и делает прозрачным все окно с все виджеты и рамка. Еще 4 свойства leftGlassMargin, rightGlassMargin, topGlassMargin и bottomGlassMargin отвечают за размер дополнительного поля слева, справа, сверху и снизу окна соответственно. Значения отступов указаны в пикселях. Значения по умолчанию 0. Я не вижу в этих свойствах приложение application, но написал о них для полноты картины.
Main.qml
import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 2.0 import QtQuick.Dialogs 1.0 import QtWinExtras 1.0 Window { visible: true width: 640 height: 480 title: qsTr("Hello WinExtras") DwmFeatures { id: dwmFeatures blurBehindEnabled: true leftGlassMargin : 10 rightGlassMargin : 10 topGlassMargin : 10 bottomGlassMargin : 10 excludedFromPeek : false peekDisallowed : false flip3DPolicy: QtWin.FlipExcludeBelow } Button{ x:100 y:200 width:200 height: 100 text: "button" } TaskbarButton { id: taskbarButton //overlay.iconSource: "loading.png" overlay.accessibleDescription: "Loading" progress.visible: true progress.value: 50 } ThumbnailToolBar { ThumbnailToolButton { iconSource: "r.png"; tooltip: "Next"; onClicked: taskbarButton.progress.value = taskbarButton.progress.value+1 } ThumbnailToolButton { iconSource: "l.png"; tooltip: "Prep"; onClicked: taskbarButton.progress.value = taskbarButton.progress.value-1 } ThumbnailToolButton { iconSource: "pause.png"; tooltip: "Pause"; onClicked: taskbarButton.progress.setPaused(!taskbarButton.progress.paused) } ThumbnailToolButton { interactive: false; flat: true } ThumbnailToolButton { iconSource: "open.png"; tooltip: "OpenFile"; onClicked: fileDialog.open()} ThumbnailToolButton { iconSource: "exit.png"; tooltip: "Open"; onClicked: Qt.quit() } } JumpList { id: jumpList recent.visible: true frequent.visible: true //tasks.visible: true } FileDialog { id: fileDialog selectFolder: true title: "Please choose a file" folder: shortcuts.home onAccepted: { console.log("You chose: " + fileDialog.fileUrls) } } }
Main.cpp
clude <QFileInfo> #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QDir> #include <QSettings> static void associateFileTypes(const QStringList &fileTypes) { QString displayName = QGuiApplication::applicationDisplayName(); QString filePath = QCoreApplication::applicationFilePath(); QString fileName = QFileInfo(filePath).fileName(); //qDebug() << displayName << 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\"")); } int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); app.setApplicationDisplayName("QtWinExtras Test"); associateFileTypes(QStringList(".txt")); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }