Russian Qt Forum
Ноябрь 23, 2024, 15:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qml динамический компонент  (Прочитано 7513 раз)
BuRn
Гость
« : Февраль 08, 2014, 11:05 »

Добрый день. Подскажите, какие есть способы, разместить элемент по верх главного qml файла и элементов вместе с ними. Требуется сделать что-то типа MessageBox, который будет перекрывать все остальные компоненты главного qml файла. Создание производиться из сишника
« Последнее редактирование: Февраль 08, 2014, 11:12 от BuRn » Записан
OKTA
Гость
« Ответ #1 : Февраль 08, 2014, 14:18 »

Так просто создаешь еще один QDeclarativeView, у которого source и есть твой messageBox! Я так делаю)
Записан
BuRn
Гость
« Ответ #2 : Февраль 08, 2014, 14:40 »

Так просто создаешь еще один QDeclarativeView, у которого source и есть твой messageBox! Я так делаю)
Дык когда я сделаю setSource разве он не перекроет/затрет весь уже отрисованный контент?
Записан
OKTA
Гость
« Ответ #3 : Февраль 08, 2014, 15:30 »

таки чем он перекроет? это же будет отдельное окно - задай ему координаты при создании и все будет ок)
Записан
BuRn
Гость
« Ответ #4 : Февраль 08, 2014, 16:11 »

таки чем он перекроет? это же будет отдельное окно - задай ему координаты при создании и все будет ок)
Честно говоря, всегда, когда писал на QML, считал что в программе написанной на QML должно быть одно окно... Пасибо, попробую
Записан
vregess
Гость
« Ответ #5 : Февраль 08, 2014, 16:46 »

Так просто создаешь еще один QDeclarativeView, у которого source и есть твой messageBox! Я так делаю)

Вообще странный совет. Можно просто создать прозрачный слой на всю сцену поверх всех элементов (меняй z-index), который будет перехватывать события мыши. А поверх него свой диалог.
Когда я делал, то были проблемы с MouseArea - некоторые события передавали ниже, точно уже не помню. Поэтому я писал свой класс:

Layer.qml:
Код:
import QtQuick 2.0
import aux.tools 1.0

/**
 * Used to stop mouse events propagation to lower items on the stack.
 * MouseBlocker is a c++ class.
 * See Contentx.cpp and gui/MouseBlocker.cpp
 */
Rectangle {
    MouseBlocker {anchors.fill: parent}
}

MouseBlocker.cpp:
Код:
#include "gui/MouseBlocker.h"
#include "common/setDebugNew.h"

MouseBlocker::MouseBlocker(QQuickItem *parent)
: QQuickItem(parent)
{
    //setAcceptHoverEvents(true);
    setAcceptedMouseButtons(Qt::AllButtons);
    setCursor(Qt::ArrowCursor);
}
//------------------------------------------------------------------------------

void MouseBlocker::hoverEnterEvent(QHoverEvent *event)
{
    event->accept();
}
//------------------------------------------------------------------------------

void MouseBlocker::hoverLeaveEvent(QHoverEvent *event)
{
    event->accept();
}
//------------------------------------------------------------------------------

void MouseBlocker::hoverMoveEvent(QHoverEvent *event)
{
    event->accept();
}   

void MouseBlocker::mouseMoveEvent(QMouseEvent *event)
{
    event->accept();
}
//------------------------------------------------------------------------------

void MouseBlocker::mousePressEvent(QMouseEvent *event)
{
    event->accept();
}
//------------------------------------------------------------------------------

void MouseBlocker::mouseReleaseEvent(QMouseEvent *event)
{
    event->accept();
}
//------------------------------------------------------------------------------

void MouseBlocker::wheelEvent(QWheelEvent *event)
{
    event->accept();
}
//------------------------------------------------------------------------------

Ну всякие мелочи я не описываю, навроде как создать и показать из с++.
Записан
OKTA
Гость
« Ответ #6 : Февраль 08, 2014, 17:03 »

Если создавать внутри главное сцены, то за пределы сцены объект не вылезет, а если отдельным, то будет полноценное окошко самостоятельное. Очень удобно использовать для красивых всплывающих сообщений в трее и для тех же messagebox, Если надо показать его, а основное приложение свернуто.
Записан
vregess
Гость
« Ответ #7 : Февраль 08, 2014, 17:20 »

Возможно при некоторых обстоятельствах отдельное окно и будет удобнее. Просто мой ход мыслей схож с ТС
Честно говоря, всегда, когда писал на QML, считал что в программе написанной на QML должно быть одно окно
Записан
OKTA
Гость
« Ответ #8 : Февраль 08, 2014, 17:50 »

не стоит себя ограничивать такими условностями  Подмигивающий
Записан
BuRn
Гость
« Ответ #9 : Февраль 08, 2014, 21:11 »

не стоит себя ограничивать такими условностями  Подмигивающий
Вероятно, в вашем случае, можно обломаться с прозрачностью... Свойства opacity главного ректангла того же MessageBox уже не установить...
Записан
OKTA
Гость
« Ответ #10 : Февраль 09, 2014, 00:12 »

Почему не установить? покажите код-пруф))
Записан
BuRn
Гость
« Ответ #11 : Февраль 09, 2014, 00:27 »

Почему не установить? покажите код-пруф))
Я предположил, ибо будет новое окно...
Записан
OKTA
Гость
« Ответ #12 : Февраль 09, 2014, 01:54 »

Все там устанавливается, попробуй))) На личном опыте проверено!)
Записан
BuRn
Гость
« Ответ #13 : Февраль 09, 2014, 14:07 »

Все там устанавливается, попробуй))) На личном опыте проверено!)
В любом случае спасибо, будем тестить и проверять как оно на деле работает
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 20.