2016-12-17 1 views
-1

QtQuick.Window permet de contrôler le comportement de la fenêtre en utilisant la propriété "flags" avec Qt::WindowFlags. A partir de Qt docs:Fenêtres non-système dans QML

drapeaux de fenêtre sont une combinaison d'un type (par exemple Qt :: Dialog) et zéro ou plusieurs indices au système de fenêtre (par exemple Qt :: FramelessWindowHint). Si le widget a le type Qt :: Widget ou Qt :: SubWindow et devient une fenêtre (Qt :: Window, Qt :: Dialog, etc.), il est mis à la position (0, 0) sur le bureau . Si le widget est une fenêtre et devient un Qt :: Widget ou Qt :: SubWindow, il est mis à la position (0, 0) par rapport à son widget parent.

Examples existe des utilisations QML de Qt :: WindowFlags.

Malheureusement, tous les exemples disponibles créer fenêtres système en ce que les fenêtres sont visibles au gestionnaire de fenêtres du système. Le docs affirme que non-système Windows peut également être mis en œuvre en utilisant le Qt::SubWindow drapeau, mais je n'ai pas pu y parvenir. Est-ce que quelqu'un a un exemple de travail en QML?

Voir QMdiSubWindow des exemples de fonctionner en C.

+0

Vous voulez donc essentiellement une pseudo-fenêtre dans une fenêtre système? – dtech

+0

Oui. Est-ce que je pourrais l'implémenter de zéro dans QML? Aussi oui. Mais pourquoi passer le temps s'il est déjà pris en charge? En guise de note annexe, j'aimerais aussi que quelqu'un me montre que Qt :: SubWindow fonctionne réellement dans QML. – BrianTheLion

+0

Vous pouvez vous référer à la question [this] (http://stackoverflow.com/questions/22682057/does-qt-qml-have-qmdiarea). Le moyen le plus simple pourrait être de mettre en place une "fenêtre" "fausse". – BaCaRoZzo

Répondre

0
import QtQuick 2.5 
import QtQuick.Window 2.2 

ApplicationWindow { 
    id: main 
    visible: true 
    width: 1280 
    height: 1024 

    Window { 
    visible: true 
    flags: Qt.SubWindow 
    } 
} 

Pour moi, cela crée une fenêtre secondaire qui est toujours pas en haut de la fenêtre d'application, n'est pas visible comme une fenêtre régulière à la barre des tâches et commutateur de tâche, et n'a pas minimiser, maximiser et fermer les boutons, mais il a toujours un cadre et un nom. Cependant, il ne se limite pas à la zone de la fenêtre principale de l'application, il peut se déplacer à l'extérieur de celui-ci et il se déplace indépendamment de la fenêtre principale.

Si c'est le comportement que vous recherchez, alors vous êtes tous ensemble. Si vous voulez l'avoir confiné à la fenêtre principale et qu'il soit déplacé avec lui, il suffit d'implémenter un simple qml Item avec la décoration et les boutons nécessaires, puis vous pouvez y mettre tout le contenu que vous voulez.

+0

Pouvez-vous inclure la version QtQuick? Merci! – BrianTheLion

+0

@BrianTheLion - done – dtech

+0

Cela échoue pour moi sur Ubuntu 16.04. La sous-fenêtre est toujours visible pour le gestionnaire de fenêtres. – BrianTheLion

0

Un QMdiSubWindow n'est pas réellement une fenêtre, mais un widget se comporte comme une fenêtre dans une fenêtre parent spéciale. Je suppose un instant que vous utilisez QtQuick comme technologie UI avec QML, auquel cas vous pouvez simplement faire cela en ayant Item comme un enfant de l'élément racine et avec une valeur Z plus élevée que les autres enfants.

Une technique courante est d'avoir une ou plusieurs couches de recouvrement

import QtQuick 2.0 

Item { 
    id: mainWindow 

    // main window content that should be below the sub windows 

    Item { 
     id: mdiArea 

     // any item in here is on top of any mainWindow contents 
     // individual stacking order can easily be controlled with each item's "z" property 
    } 

    Item { 
     id: popupArea 
     // any item in here is on top of everything in mdiArea 
    } 
} 

Au lieu de Item pour le MdiArea on pourrait envisager de créer un élément personnalisé aussi emtpy en C++, mais qui offre une gestion de position pour ses enfants, par exemple "tuile" ou "pile".

Une classe comme celle-là pourrait même faire une belle contribution à Qt lui-même.