Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Upcoming QtCreator support for Qml, QtCreator обзавелся дизайнером qml и ... 
:(
    Опции темы
SABROG
Дата 3.2.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Есть такая простая конструкция:

Код

Rectangle {
    id: Mamka
    ...
    Rectangle {
        id: Rebenok
        ...
    }
}


Каким образом из ECMAScript/QML скрипт достучаться до ребенка типа "Mamka.Rebenok.width" <- такая конструкция не работает.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
revers
Дата 3.2.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Из документации:
Цитата

The id property is a special property of type id. Assigning an id to an object allows you to refer to it elsewhere.

Так что просто Rebenok.width.
PM MAIL   Вверх
SABROG
Дата 3.2.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(revers @ 3.2.2010,  18:33)
Из документации:
Цитата

The id property is a special property of type id. Assigning an id to an object allows you to refer to it elsewhere.

Так что просто Rebenok.width.

Т.е. ты хочешь сказать, что я не могу создать массив комплексных ректов, которые будут содержать внутри ректы с одним и тем же ID'шником? Предположим я создал крутую кнопку и хочу распихать по интерфейсу, а внутри каждой есть элемент с одним именем, как же мне обращаться к ним тогда?

Конструкция
Код

Mama.children[0].x


Как бы работает за исключением таких вещей, что я не могу вывести в консоль id элемента или обратиться к нему например так "Mama.children['Rebenok'].x"


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
revers
Дата 3.2.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Цитата

Предположим я создал крутую кнопку и хочу распихать по интерфейсу, а внутри каждой есть элемент с одним именем, как же мне обращаться к ним тогда?

Можно добавить к кнопке свойство содержащее уникальное имя. Все кнопки хранить в массиве, выбирать нужный поиском.
Если доступ необходим не ко всему дочернему объекту а только к некоторым свойствам, наверно лучше делать так:
Наша крутая кнопка, сохраненная в Button.qml:
Код

import Qt 4.6

Rectangle {
    id: button
    width: btnText.width+16
    height: 24
    color: "#141414"
    border.color: "#474747"
    property string text: "Button"
    signal clicked()
    Rectangle {
        id: layA
        width: parent.width-4; height: parent.height-4
        anchors.centerIn: parent
        color: "#333333"
        border.color: "#474747"
        gradient: Gradient {
            GradientStop { id: beginButColor; position: 0.0; color: "#464646" }
            GradientStop { position: 1.0; color: "#333333" }
        }
        effect: Colorize {
            id: colorizeEffect
            color: "white"
            strength: 0.0
            strength: Behavior { NumberAnimation { duration: 200 } }
        }
    }
    MouseRegion {
        id: buttonRegion
        anchors.fill: parent
        hoverEnabled: true
        onEntered: {
            if (!buttonRegion.pressed)
            {
                colorizeEffect.color = "white"
                colorizeEffect.strength = 0.1
            }
        }
        onExited: {
            colorizeEffect.strength = 0.0
        }
        onPressed: {
            button.border.color = "#525252"
            layA.border.color = "#434343"
            beginButColor.color = "#3c3c3c"
            colorizeEffect.color = "black"
            colorizeEffect.strength = 0.1
        }
        onReleased: {
            button.border.color = "#474747"
            layA.border.color = "#474747"
            beginButColor.color = "#464646"
            if (buttonRegion.containsMouse)
            {
                colorizeEffect.strength = 0.1
            }
            colorizeEffect.color = "white"
        }
        onClicked: {
            parent.clicked()
        }
    }
    Text {
        id: btnText
        text: parent.text
        color: "#EEEEEE"
        anchors.centerIn: parent
    }
}

Ключевой момент - собственное свойство главного предка - text, значение которого исп-ся в btnText. Можно еще "property alias text: btnText.text".
В главном файле:
Код

import Qt 4.6

Rectangle {
    width: 200
    height: 200
    color: "#333333"
    Column {
        anchors.centerIn: parent
        Button { id: but1; text: "lalala" }
        Button { id: but2; text: "lololo" }
    }
}

PM MAIL   Вверх
SABROG
Дата 4.2.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Такую цитату в документации обнаружил.

Цитата

As all external methods, signals and properties are accessible to external users, developers should ensure that setting these properties does not have any undesirable side-effects. For most resiliance, root level properties should only be used for literal default values. When a root level property must be used inside the component - such as the children property - property aliases can be used to redirect this property to a "safe" location for external users. Try to think of the root level properties as being "owned" by the components user, rather than the component itself.


Если я все правильно перевел, то получается, что основные свойства компонента доступны пользователю для изменения. Если же мы заводим свойства, которые предназначены только для внутреннего пользователя, то надо делать еще одно вложение (Item/Rectangle), а уже из него через alias "экспортировать" свойства, которые мы хотим, чтобы были доступны внешнему пользователю и изменение которых не повлечет неприятных последствий.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
revers
Дата 4.2.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Цитата(SABROG @ 3.2.2010,  00:24)

Код

rect1.x = rect2.x;
rect1.y = rect2.y;
rect1.width = rect2.width;
rect1.height = rect2.height;


В Qt это решалось манипуляциями c QRect'ом.

Вчера в документации появилась информация о типах pos, size и rect. Пока реализован только pos. Так что ждем.
PM MAIL   Вверх
SABROG
Дата 4.2.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Вроде как можно использовать эти типы:

Цитата

Qt.rect(int x, int y, int width, int height)
Qt.size(int width, int height)
Qt.point(int x, int y)
Qt.rgba(qreal red, qreal green, qreal blue, qreal alpha)
Qt.hsla(qreal hue, qreal saturation, qreal lightness, qreal alpha)
Qt.vector3d(real x, real y, real z)


Но я не знаю как Qt.rect одной строкой присвоить элементу. Надо попробовать такой вариант:

Код

geometry: Qt.rect(0, 0, 100, 100)

---
Не, не работает. К тому же я вспомнил, что есть еще и Z.
---
Пробую делать компонент, положил файлик qmldir с номерами версий компонентов. Далее пытаюсь загрузить namespace с учетом версии:

Код

import "MyNamespace" 0.0 as MyNamespace
...
MyNamespace.myComponent {
}


И не получается. Пишет, что не может найти "MyNamespace/myComponent". Если убрать версию 0.0, то находит. Тогда какой смысл прописывать версии в файле qmldir, если он не работает?
---
Не работает переопределение на width и height, при этом на x и y работает:

Код

Item {
    property alias x: baseWindow.x
    property alias y: baseWindow.y
    //property alias width: baseWindow.width
    //property alias height: baseWindow.height
    Rectangle {
        id: baseWindow


Цитата

Cannot override FINAL property 
         property alias height: baseWindow.height


Это сообщение отредактировал(а) SABROG - 5.2.2010, 00:14


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
revers
Дата 5.2.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Цитата

geometry: Qt.rect(0, 0, 100, 100)

Работает только с теми, у кого есть свойство geometry. К примеру: 
Код

import Qt 4.6

Rectangle {
    width: 200
    height: 200
    GraphicsObjectContainer {
        synchronizedResizing: true
        anchors.margins: 10
        anchors.fill: parent
        QGraphicsWidget {
            geometry: Qt.rect(10,10,20,20)
            Text {
                pos: parent.pos
                text: "lsl"
            }
        }
    }
}


---------

Еще один капец. Частицы должны притягиваться к grav1. Но ведут себя мягко говоря странно.
Код

import Qt 4.6

Rectangle {
    id: screen
    width: 320
    height: 480
    color: "black"
    Particles {
        x: parent.width; y: 240
        width: 1
        height: 1
        source: "star.png"
        lifeSpan: 5000
        count: 5
        angle: 180
        angleDeviation: 30
        velocity: 100
        ParticleMotionGravity {
            id: grav1
            yattractor: 200 /*gravity1.y + gravity1.height / 2*/
            xattractor: 200/*gravity1.x + gravity1.width / 2*/
            acceleration: 25
        }
    }
    Rectangle {
        color: "red"
        x: grav1.xattractor; y: grav1.yattractor
        width: 1; height: 1
    }
    Rectangle {
        id: gravity1
        width: 10; height: 10
        MouseRegion {
            anchors.fill: parent
            drag.target: gravity1
            drag.axis: "XandYAxis"
            drag.minimumX: 0; drag.maximumX: screen.width - gravity1.width
            drag.minimumY: 0; drag.maximumY: screen.height- gravity1.height
            onClicked: grav1.acceleration = grav1.acceleration == 25 ? 0 : 25
        }
    }
}


Это сообщение отредактировал(а) revers - 5.2.2010, 06:10
PM MAIL   Вверх
SABROG
Дата 5.2.2010, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Такое в консоль сыпется

Код

Cannot open  QUrl( "file:///D:/Work/qml_test/star.png" )  
QmlExpression: Expression "grav1.xattractor" depends on non-NOTIFYable properties: 
    QmlGraphicsParticleMotionGravity::xattractor
QmlExpression: Expression "grav1.yattractor" depends on non-NOTIFYable properties: 
    QmlGraphicsParticleMotionGravity::yattractor



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
revers
Дата 5.2.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Картинку можно взять в %QTSRC%/examples/declarative/animations/images/star.png
Остальные варнинги на работу не влияют.
PM MAIL   Вверх
revers
Дата 6.2.2010, 22:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Цитата(SABROG)

Из примеров по JavaFx я увидел, что все GUIшные элементы экспортируются из Swing библиотеки, в Qt пока такого нет.


Сегодня наконец то дошли руки и до этого.
Получилось вставить QPushButton в Rectangle.
pushbuttonextension.h:
Код

#ifndef PUSHBUTTONEXTENSION_H
#define PUSHBUTTONEXTENSION_H

#include <QObject>
#include <QPushButton>
#include <QtGui/QGraphicsProxyWidget>
#include <qml.h>

class PushButtonProxy : public QGraphicsProxyWidget
{
    Q_OBJECT
public:
    PushButtonProxy(QObject *parent = 0);
};

#endif // PUSHBUTTONEXTENSION_H


pushbuttonextension.cpp;
Код

#include "pushbuttonextension.h"
#include <qml.h>

PushButtonProxy::PushButtonProxy(QObject *parent)
{
    this->setWidget(new QPushButton());
}

QML_DECLARE_TYPE(PushButtonProxy);
QML_DEFINE_TYPE(MyWidgets, 1,0, QPushButton, PushButtonProxy);


pushbuttonextension.h и pushbuttonextension.cpp достаточно включить в HEADERS и SOURCES соответственно.

main.qml
Код

import Qt 4.6
import MyWidgets 1.0
Rectangle {
    width: 640
    height: 480
    SystemPalette { id: palette }
    color: palette.window
    GraphicsObjectContainer {
        synchronizedResizing: true
        QPushButton {
            geometry: "40,40, 40x40"
        }
    }
}

PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.