Дмитрий
Там. 12, 2017, 12:58 Т.Ж.

QML-мен жұмыс істеу кезінде winExtras мүмкіндіктерін пайдалану

Мазмұны

Некоторое время назад я написал несколько статей об использовании библиотеки QtWinExtras, которая открывает доступ к специальным функциям, доступным только для Windows. Теперь хочу сказать пару слов о том, как повторить тоже с помощью QML. Для этого нам нужно создать проект Qt Quick, подключить в проекте модуль winextras

  1. import QtWinExtras 1.0

И использовать 3 объекта: TaskbarButton для создания индикатора выполнения и управления им, ThumbnailToolBar для работы с кнопками на всплывающем окне панели задач и JumpList (для работы с jumpList). Также добавьте FileDialog для полноценной работы jumpList.


Для TaskbarButton нужно установить свойства id (для доступа к этому объекту извне), progress.visible: true. Кроме того, вы можете установить значок overlay.iconSource.

В ThumbnailToolBar создаем кнопки ThumbnailToolButton (от одной до семи), устанавливаем иконки и пишем обработку нажатия.

В JumpList раздел «Последние» виден для отображения последних открытых файлов, а раздел «Часто» — для отображения часто открываемых файлов.

  1. JumpList {
  2. id: jumpList
  3. recent.visible: true
  4. frequent.visible: true
  5. }

Не забывайте, что расширения файлов, попадающие в jumpList, должны быть зарегистрированы в реестре. Поэтому добавьте в основной файл функцию AssociateFileTypes(), как показано в предыдущей статье. .

Еще одна любопытная возможность — настройка прозрачности окна. Для этого вам понадобится объект DwmFeatures. Его свойство blurBehindEnabled делает окно прозрачным, если его значение равно true. Если вы установите значение false, цвет фона станет черным. Также отмечу, что прозрачность можно задать с помощью свойства opacity объекта Window. Отличается от blurBehindEnabled тем, что последний может иметь только 2 состояния (прозрачное и непрозрачное) и делает прозрачной только основную часть окна (без размещенных на ней виджетов), а opacity задает степень прозрачности и делает прозрачным все окно с все виджеты и рамка. Еще 4 свойства leftGlassMargin, rightGlassMargin, topGlassMargin и bottomGlassMargin отвечают за размер дополнительного поля слева, справа, сверху и снизу окна соответственно. Значения отступов указаны в пикселях. Значения по умолчанию 0. Я не вижу в этих свойствах приложение application, но написал о них для полноты картины.

Main.qml

  1. import QtQuick 2.6
  2. import QtQuick.Window 2.2
  3. import QtQuick.Controls 2.0
  4. import QtQuick.Dialogs 1.0
  5. import QtWinExtras 1.0
  6.  
  7. Window {
  8. visible: true
  9. width: 640
  10. height: 480
  11. title: qsTr("Hello WinExtras")
  12. DwmFeatures {
  13. id: dwmFeatures
  14. blurBehindEnabled: true
  15. leftGlassMargin : 10
  16. rightGlassMargin : 10
  17. topGlassMargin : 10
  18. bottomGlassMargin : 10
  19. excludedFromPeek : false
  20. peekDisallowed : false
  21. flip3DPolicy: QtWin.FlipExcludeBelow
  22. }
  23.  
  24. Button{
  25. x:100
  26. y:200
  27. width:200
  28. height: 100
  29. text: "button"
  30. }
  31.  
  32. TaskbarButton {
  33. id: taskbarButton
  34. //overlay.iconSource: "loading.png"
  35. overlay.accessibleDescription: "Loading"
  36. progress.visible: true
  37. progress.value: 50
  38. }
  39.  
  40. ThumbnailToolBar {
  41. ThumbnailToolButton { iconSource: "r.png"; tooltip: "Next"; onClicked: taskbarButton.progress.value = taskbarButton.progress.value+1 }
  42. ThumbnailToolButton { iconSource: "l.png"; tooltip: "Prep"; onClicked: taskbarButton.progress.value = taskbarButton.progress.value-1 }
  43. ThumbnailToolButton { iconSource: "pause.png"; tooltip: "Pause"; onClicked: taskbarButton.progress.setPaused(!taskbarButton.progress.paused) }
  44. ThumbnailToolButton { interactive: false; flat: true }
  45. ThumbnailToolButton { iconSource: "open.png"; tooltip: "OpenFile"; onClicked: fileDialog.open()}
  46. ThumbnailToolButton { iconSource: "exit.png"; tooltip: "Open"; onClicked: Qt.quit() }
  47. }
  48.  
  49. JumpList {
  50. id: jumpList
  51. recent.visible: true
  52. frequent.visible: true
  53. //tasks.visible: true
  54. }
  55.  
  56. FileDialog {
  57. id: fileDialog
  58. selectFolder: true
  59. title: "Please choose a file"
  60. folder: shortcuts.home
  61. onAccepted: {
  62. console.log("You chose: " + fileDialog.fileUrls)
  63. }
  64. }
  65. }

Main.cpp

  1. clude <QFileInfo>
  2. #include <QGuiApplication>
  3. #include <QQmlApplicationEngine>
  4. #include <QDir>
  5. #include <QSettings>
  6.  
  7. static void associateFileTypes(const QStringList &fileTypes)
  8. {
  9. QString displayName = QGuiApplication::applicationDisplayName();
  10. QString filePath = QCoreApplication::applicationFilePath();
  11. QString fileName = QFileInfo(filePath).fileName();
  12. //qDebug() << displayName << filePath << fileName;
  13. QSettings settings("HKEY_CURRENT_USER\\Software\\Classes\\Applications\\" + fileName, QSettings::NativeFormat);
  14. settings.setValue("FriendlyAppName", displayName);
  15. settings.beginGroup("SupportedTypes");
  16. foreach (const QString& fileType, fileTypes)
  17. settings.setValue(fileType, QString());
  18. settings.endGroup();
  19. settings.beginGroup("shell");
  20. settings.beginGroup("open");
  21. settings.setValue("FriendlyAppName", displayName);
  22. settings.beginGroup("Command");
  23. settings.setValue(".", QChar('"') + QDir::toNativeSeparators(filePath) + QString("\" \"%1\""));
  24. }
  25.  
  26. int main(int argc, char *argv[])
  27. {
  28. QGuiApplication app(argc, argv);
  29. app.setApplicationDisplayName("QtWinExtras Test");
  30. associateFileTypes(QStringList(".txt"));
  31. QQmlApplicationEngine engine;
  32. engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
  33. return app.exec();
  34. }

Text of the program

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз