2014-03-03 27 views
8

Ich versuche, ein Fenster ohne Rand in Qt unter Windows zu erstellen, die native Funktionen unterstützt: Aero Snap, DWM Größe und Minimierung, Shake, etc Wie Office 2013 oder Visual Studio 2012. Aber sie sind in WPF geschrieben. Es gibt viele Beispiele in wpf und reinem WinApi, aber ich konnte kein Qt-Beispiel finden.Borderless Fenster in Qt unter Windows, die native Funktionen unterstützt: Aero Snap, DWM Größe und Minimierung

Kürzlich habe ich Blizzards Battle.net App (screenshot) gefunden. Sie verwenden QT 4.8.5 und ihr Hauptfenster sieht aus und verhält sich genau so, wie ich es in meiner App möchte.

Weiß jemand, wie man das macht?

Danke für Ihre Hilfe.

+0

Obwohl ich nicht sicher über die aero bin Snap Sie diese QWidget unter Verwendung implementieren können :: setWindowFlags(), die Sie diese Kontrollen selbst ableiten können (was wahrscheinlich ist es, was die battle.net App macht das Sehen, da es ziemlich viele benutzerdefinierte Menüsteuerelemente hat). Es gibt einen wirklich schönen Artikel dazu: http://qt.developpez.com/tutorials/braindeadbzh/customwindow/ - Nachteil ist, dass es auf Französisch ist. –

+0

Meine Anwendung funktioniert jetzt so. Aero Snap funktioniert nicht. Wenn minimiert, verschwindet das Fenster ohne jegliche Animation. – PKE

+0

Ich suche nach dem gleichen Verhalten. Hast du eine Lösung gefunden? Danke im Voraus. –

Antwort

7

ich gefunden habe, eine Problemumgehung für dieses Problem.

Anstatt Qt-Hauptfenster zu verwenden, habe ich ein einfaches WinAPI-Fenster ohne Rahmen wie in this SO discussion erstellt. Dann habe ich QWinWidget aus dem QtWinMigrate-Projekt hinzugefügt und das Fenster damit gefüllt.

Als Ergebnis werden Hauptfenster und größenveränderbare Kanten von WinAPI behandelt, und alles im Hauptfenster wird von QWinWidget behandelt. Und mit QWinWidget können Sie Qt GUI wie in jeder anderen Qt App erstellen.

Here is a small example project on GitHub.

+0

Ich muss eine QMainWindow-Unterklasse durch Ihre BorderlessWindow-Klasse ersetzen. Was denkst du ist der beste Ansatz? – louissmr

+0

Meine Klasse ist keine Unterklasse des QT-Objekts. Sie sollten die Unterklasse QMainWindow wahrscheinlich durch die Unterklasse QWinWidget ersetzen. – PKE

1

Vielleicht könnte Ihnen helfen, Windows-spezifische Qt-Klassen WinExtras

http://qt-project.org/doc/qt-5/qtwin.html

http://qt-project.org/doc/qt-5/qtwinextras-module.html

Neben Ihnen QT Schnell 2.0 verwenden können UI ähnlich wie WPF zu entwerfen

+0

Ihrem Rat folgend, habe ich diesen Unterricht ausprobiert. Dieses [Beispiel] (http://qt-project.org/doc/qt-5/qtwinextras-musicplayer-example.html) zeigt, was Sie mit ihnen erreichen können. Sieht interessant aus, aber immer noch nicht, was ich brauche. – PKE

+0

@PKE winextras ist nur für aero, für benutzerdefinierte Fenster und effetc können Sie QT Quick 2.0 verwenden, sehen Sie die "Beispiel und Demo" Binär von Qt, wenn Sie Qt installieren, können Sie das im Startmenü finden -> Qt –

+0

ich don habe keine Probleme mit der Anpassung von ui. Ich rede über Hauptfenster. – PKE