Дмитрий
Дмитрий11. August 2017 14:58

Nutzung der Funktionen von winExtras bei der Arbeit mit QML

Inhalt

Vor einiger Zeit habe ich mehrere Artikel über die Verwendung der QtWinExtras-Bibliothek geschrieben, die den Zugriff auf spezielle Funktionen eröffnet, die nur für Windows verfügbar sind. Jetzt möchte ich ein paar Worte darüber sagen, wie man auch mit QML wiederholen kann. Dazu müssen wir ein Qt Quick-Projekt erstellen und das winextras-Modul im Projekt verbinden

import QtWinExtras 1.0

Und verwenden Sie 3 Objekte: TaskbarButton zum Erstellen und Verwalten eines Fortschrittsbalkens, ThumbnailToolBar zum Arbeiten mit Schaltflächen im Popup-Fenster der Taskleiste und JumpList (zum Arbeiten mit jumpList). Fügen Sie auch FileDialog für die vollständige Arbeit von jumpList hinzu.


Für TaskbarButton müssen Sie die id-Eigenschaften festlegen (um von außen auf dieses Objekt zuzugreifen), progress.visible: true. Zusätzlich können Sie das Symbol overlay.iconSource festlegen.

In ThumbnailToolBar erstellen wir die ThumbnailToolButton (von eins bis sieben) Buttons, setzen die Icons und schreiben die Klickverarbeitung.

In JumpList ist der letzte Abschnitt sichtbar, um die zuletzt geöffneten Dateien anzuzeigen, und häufig, um häufig geöffnete Dateien anzuzeigen.

JumpList {
    id: jumpList
    recent.visible: true
    frequent.visible: true
}

Vergessen Sie nicht, dass die Dateierweiterungen, die in die jumpList fallen, in der Registrierung registriert werden müssen. Fügen Sie daher die Funktion AssociateFileTypes () zur Hauptdatei hinzu, wie im vorherigen Artikel. gezeigt.

Eine weitere merkwürdige Möglichkeit ist die Einstellung der Transparenz des Fensters. Dazu benötigen Sie das Objekt DwmFeatures. Seine Eigenschaft blurBehindEnabled macht das Fenster transparent, wenn ihr Wert wahr ist. Wenn Sie es auf false setzen, wird die Hintergrundfarbe schwarz. Ich stelle auch fest, dass die Transparenz mit der Eigenschaft opacity des Window-Objekts eingestellt werden kann. Es unterscheidet sich von blurBehindEnabled dadurch, dass letzteres nur 2 Zustände haben kann (transparent und opak) und nur den Hauptteil des Fensters transparent macht (ohne darauf platzierte Widgets), während opacity den Grad der Transparenz festlegt und das gesamte Fenster transparent macht alle Widgets und ein Rahmen. Weitere 4 leftGlassMargin-, rightGlassMargin-, topGlassMargin- und bottomGlassMargin-Eigenschaften sind für die Größe des zusätzlichen Rands von der linken, rechten, oberen bzw. unteren Seite des Fensters verantwortlich. Einzugswerte werden in Pixel angegeben. Die Standardwerte sind 0. Ich sehe die Anwendungsanwendung in diesen Eigenschaften nicht, aber ich habe der Vollständigkeit halber darüber geschrieben.

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();
}

Programmtext

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken