2016-12-17 3 views
-1

QtQuick.Window позволяет нам работать с окном с использованием свойства «flags» с Qt::WindowFlags. Из Qt docs:Несистемные окна в QML

Флаги окна представляют собой комбинацию типа (например, Qt :: Dialog) и ноль или более подсказок к оконной системы (например, Qt :: FramelessWindowHint).

Если виджет имел тип Qt :: Widget или Qt :: SubWindow и становится окном (Qt :: Window, Qt :: Dialog и т. Д.), Он помещается в позицию (0, 0) на рабочем столе , Если виджет является окном и становится Qt :: Widget или Qt :: SubWindow, он помещается в позицию (0, 0) относительно его родительского виджета.

Examples Существует использование QML Qt :: WindowFlags.

К сожалению, все имеющиеся примеры создание системных окон в том, что окна могут видеть оконный менеджер системы. docs утверждают, что не системные окна также может быть реализован с использованием флага Qt::SubWindow, но я не смог этого достичь. У кого-нибудь есть рабочий пример в QML?

См QMdiSubWindow для примеров его работы в С.

+0

Итак, вы в основном хотите, чтобы псевдо-окно внутри системного окна? – dtech

+0

Да. Могу ли я реализовать это с нуля в QML? Также да. Но зачем тратить время, если оно уже поддерживается? В качестве вспомогательной заметки мне также хотелось бы, чтобы кто-то показал мне, что Qt :: SubWindow действительно работает в QML. – BrianTheLion

+0

Вы можете обратиться к [this] (http://stackoverflow.com/questions/22682057/does-qt-qml-have-qmdiarea) вопросу. Самый простой способ - реализовать «фальшивое» внутреннее окно. – BaCaRoZzo

ответ

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 
    } 
} 

Для меня это создает вторичное окно, которое всегда не в верхней части окна приложения, не видно, как обычное окно в панели задач и переключатель задач и не имеет кнопок минимизации, максимизации и закрытия, но у него все еще есть кадр и имя. Однако он не ограничивается областью главного окна приложения, он может перемещаться за его пределами и перемещается независимо от главного окна.

Если это ваше поведение, вы все настроены. Если вы хотите, чтобы он ограничивался главным окном и перемещался вместе с ним, просто выполните простой qml Item с необходимым оформлением и кнопками, затем вы можете разместить любой контент, который вы хотите в нем.

+0

Можете ли вы включить версию QtQuick? Благодаря! – BrianTheLion

+0

@BrianTheLion - сделано – dtech

+0

Это не подходит для меня на Ubuntu 16.04. Подстрока по-прежнему отображается диспетчер окон. – BrianTheLion

0

A QMdiSubWindow на самом деле не Окно, а виджет, который ведет себя как окно внутри специального родительского окна.

Я предполагаю, что вы используете QtQuick в качестве технологии пользовательского интерфейса с QML, и в этом случае вы можете просто сделать это, указав любой тип Item в качестве дочернего элемента корня и с более высоким значением Z, затем любой из другие дети.

Обычная техника должна иметь один или несколько наложения слоев

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 
    } 
} 

Вместо Item для MdiArea можно было рассмотреть, чтобы создать также пуста пользовательский элемент в C++, но предлагает позиционное управление своими детьми, например «плитка» или «стопка».

Класс, подобный этому, может даже внести хороший вклад в сам Qt.