Russian Qt Forum

Qt => Qt Quick => Тема начата: RustAlex от Январь 18, 2016, 15:42



Название: [РЕШЕНО] Родительское окно при вызове из по&#
Отправлено: RustAlex от Январь 18, 2016, 15:42
Везде по коду QML использую механизм создания окошек с затемнением основного окна приложения, код ниже:
// обеспечивает затемнение области и ограничение пространства работы мыши
// мышь будет работать только внутри второй области
Код
Javascript
   width: mainWindow.width
   height: mainWindow.height
   visible: false
 
   Rectangle {
       id: mainRect2
       color: Qt.rgba(0.0, 0.0, 0.0, 0.5)
       anchors.fill: parent
       MouseArea {
           anchors.fill: parent
       }
   }
 

Однако в одном месте генерирую динамический QML из под JS. В результате mainWindow.width, mainWindow.height - не захватывает все окно приложения... почему-то берут рамки окна меньше (возможно окна из которого отрабатывал JS). Как задать окно приложения явно?


Название: Re: Родительское окно при вызове из под JS
Отправлено: BuRn от Январь 19, 2016, 08:54
Покажите, как вы создаете объект, через createObject ?


Название: Re: Родительское окно при вызове из под JS
Отправлено: RustAlex от Январь 19, 2016, 10:31
Функция paintAgenda() вызывается в qml коде. В нее передаю делегат в котором будет отрисовка:
Код
C++ (Qt)
function paintAgenda( parentDelegate, ...) {
   var dynComponent    = Qt.createComponent("Agenda.qml");
   ...
   createAgenda( parentDelegate, dynComponent, ... )
   ...
}
 
function createAgenda( parentDelegate, dynComponent, ....)
{
   var obj1 = dynComponent.createObject(parentDelegate, {"txtName":"Test name!", "height":"20", "width":"70"});
   ...
}


Название: Re: Родительское окно при вызове из под JS
Отправлено: BuRn от Январь 20, 2016, 23:14
Функция paintAgenda() вызывается в qml коде. В нее передаю делегат в котором будет отрисовка:
Код
C++ (Qt)
function paintAgenda( parentDelegate, ...) {
   var dynComponent    = Qt.createComponent("Agenda.qml");
   ...
   createAgenda( parentDelegate, dynComponent, ... )
   ...
}
 
function createAgenda( parentDelegate, dynComponent, ....)
{
   var obj1 = dynComponent.createObject(parentDelegate, {"txtName":"Test name!", "height":"20", "width":"70"});
   ...
}
Что-то не пойму, так вы своему объекту задаете статически размер... Если это в качестве примера, то попробуйте так же, как вы задаете ширину и высоту, прибить анкорсами к паренту


Название: Re: Родительское окно при вызове из под JS
Отправлено: RustAlex от Январь 21, 2016, 18:47
При создании данного объекта он координатами и размерами привязывается статично к делегату, на котором происходит отрисовка.
См. вложенный рисунок.

При обработке MouseArea { onClicked: ... } в Agenda.qml - выводится окошко диалога - которое ранее создано, и у него меняется флаг visible - заполняются поля извлеченные из объекта, т.е. отражается детальная информация об объекте.
Это окошко реализовано аналогично другим подобным в системе - везде затенение области приложения (В чем и проблема) происходит корректно. А здесь нет - мое предположение связано с тем что создается объект из JS...



Название: Re: Родительское окно при вызове из под JS
Отправлено: RustAlex от Январь 21, 2016, 19:06
Проблема разрешилась. Тупил сам. Был создан дублирующий объект не с тем родителем... Вызов из JS не играл никакой роли.
Спасибо за участие!