Поиск:

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


Серийный программист
****


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

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



собственно сабж  кто еще не в курсе 
PM WWW   Вверх
SABROG
Дата 28.1.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(chaos @ 28.1.2010,  13:27)
собственно сабж  кто еще не в курсе

Из того что я увидел я ничего не понял. Где обычные компоненты? QWidget, QPushButton и т.д. и т.п. Они предлагают делать интерфейс программы на основе png картинок и графических примитивов (прямоугольник, треугольник, эллипс) ? Будет ли каким-то боком привязана системе стилей? Как реализуется интерфейс с диалоговыми окнами (которые должны перемещаться за пределы главного окна) ? Пока это всё мне напоминает QGraphicsView с примитивами типа QGraphicsRectItem, который в принципе не несет сам по себе никакой смысловой нагрузки.

Вероятно написание комплексных компонентов типа QTreeView еще предстоит. Не понятно правда ка кони собираются это сделать, импортировать готовые или реализовывать свои на основе QML языка.
---
Судя по документации реализовано только 3 виджета:

Цитата

    * Flickable
    * Flipable
    * WebView


Это сообщение отредактировал(а) SABROG - 28.1.2010, 15:57


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


Forbidden love...
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 22.1.2009
Где: Москва

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



Сильно напоминает XAML.  smile 

Хороший вопрос, где обычные компоненты..? И насчет совместимости с предыдущими версиями.
--------------------
Best regards, Madonna
PM   Вверх
chaos
Дата 28.1.2010, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



SABROG, тут не надо путать разработку обычных приложений(на базе QWidget) - все это осталось. что касается QML - да, никаких привычных элементов управления нет, все нужно делать самому. Если например посмотреть демки и примеры для DeclarativeUI, то можно понять что нет никаких проблем с кнопочками. Системных стилей никаких нет, разве что самому их не сделать.

Цитата(Madonna @  28.1.2010,  13:15 Найти цитируемый пост)
И насчет совместимости с предыдущими версиями.

о какой совместимости идет речь?


ЗЫ разработка на базе QWidget & QML - это разные направления. так что пугать не надо smile

ЗЫЫ пишите исчо, попробую на все ответить

Добавлено через 3 минуты и 7 секунд
на что это похоже

Это сообщение отредактировал(а) chaos - 28.1.2010, 17:20
PM WWW   Вверх
SABROG
Дата 28.1.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(chaos @  28.1.2010,  17:19 Найти цитируемый пост)
на что это похоже

Скорее эта ссылка.

Грубо говоря QML для извращенцев, которым нужно не ехать, а шашечки. Бухгалтерские программы на нем врятли кто будет писать.

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

Это сообщение отредактировал(а) SABROG - 28.1.2010, 18:35


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


Опытный
**


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

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



Цитата(SABROG @  28.1.2010,  17:45 Найти цитируемый пост)
Из примеров по JavaFx я увидел, что все GUIшные элементы экспортируются из Swing библиотеки, в Qt пока такого нет.

Не совсем так. В последних версиях JavaFX (ветка 1.2) появился набор контролов из пакета javafx.scene.control.* - http://weblogs.java.net/blog/2009/06/02/ui...trols-javafx-12 Их конечно немного, но, возможно, пакет будет пополняться новыми. Выглядят достаточно симпатично. 

Это сообщение отредактировал(а) Amp - 28.1.2010, 18:46
PM MAIL   Вверх
chaos
Дата 28.1.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Цитата(SABROG @  28.1.2010,  14:45 Найти цитируемый пост)
Скорее эта ссылка.

те же яйца...


Цитата(SABROG @  28.1.2010,  14:45 Найти цитируемый пост)
Грубо говоря QML для извращенцев, которым нужно не ехать, а шашечки.

ну зря Вы так
Цитата(SABROG @  28.1.2010,  14:45 Найти цитируемый пост)
Бухгалтерские программы на нем врятли кто будет писать.

согласен

Цитата(SABROG @  28.1.2010,  14:45 Найти цитируемый пост)
Из примеров по JavaFx я увидел, что все GUIшные элементы экспортируются из Swing библиотеки, в Qt пока такого нет.

щас точно ответить не могу, но
1. Вы же можете в QGraphicsScene добавить QWidget - можете.
2. Сейчас точно сказать не могу, тк не знаю, но через часок попробую чего-нить экспортировать

ЗЫ пиво с рыбой пью smile
PM WWW   Вверх
chaos
Дата 28.1.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Здаюся пока:

main.cpp
Код

#include <QtGui/QApplication>
#include <QtCore/QUrl>
#include <QtDeclarative/QmlView>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QmlView view;
    view.setUrl(QUrl("main.qml"));
    view.execute();
    view.show();

    return app.exec();
}


Код

import Qt 4.6
import ChaosQmlExt 1.0

Rectangle {
    width: 640
    height: 480
    color: "red"

    QtButton { }
}


qtbutton.hpp
Код

#ifndef QTBUTTON_HPP
#define QTBUTTON_HPP

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

class QtButton : public QPushButton
{
Q_OBJECT
};

QML_DECLARE_TYPE(QtButton)

#endif // QTBUTTON_HPP


qtbutton.cpp
Код

#include "qtbutton.hpp"

QML_DEFINE_TYPE(ChaosQmlExt, 1, 0, QtButton, QtButton)


при запуске получаю: ASSERT: "!d->isWidget" in file kernel\qobject.cpp, line 1964

Добавлено через 7 минут и 45 секунд
Цитата(Amp @ 28.1.2010,  15:44)
Цитата(SABROG @  28.1.2010,  17:45 Найти цитируемый пост)
Из примеров по JavaFx я увидел, что все GUIшные элементы экспортируются из Swing библиотеки, в Qt пока такого нет.

Не совсем так. В последних версиях JavaFX (ветка 1.2) появился набор контролов из пакета javafx.scene.control.* - http://weblogs.java.net/blog/2009/06/02/ui...trols-javafx-12 Их конечно немного, но, возможно, пакет будет пополняться новыми. Выглядят достаточно симпатично.

тож так думаю.

у меня как раз большой проект под мобильные устройства и заказчик "писил кипятком" когда увидел наброски на qml
PM WWW   Вверх
Sovereign
Дата 28.1.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я вот не пойму к чему эти вещи как qml, тот же xaml  или как он там в дотнете. Когда-то давным давно флешем занимался, ну и пришлось делать для курсовой приложение типа графики зависимостей, карты распределений, так там главное было красоту навести, чтоб все бегало светилось и мигало, и презентация главное, а в повседненвной жизни главное чтоб прога работала и все, остальное нафиг. Да, флеш и Qt и близко не лежали, но тут что-то похожее на ключевые кадры (State Machine) все эти переходы цвета, яркости, прозрачности, местоположения и чего только можно придумать (Qt Animations) тогда (года 4 назад) всю эту красоту хотелось чтоб  без flash player'a работало, сейчас не знаю, наигрался, надоело. И кстати, готовых графических элементов в одну тему не будет я так думаю, так что придется все самому, эт вроде как минус, а если возможно будет создать как во флеше не парясь произвольные элементы, было бы не плохо, а так лишь искоса наблюдаю что же родится... время покажет. Хотя сюда по роликам с ютюба мини игрушки ничего так клепают, но не думаю что это предел мечтаний каждого 


ps. сорри за поток сознания =)

Это сообщение отредактировал(а) Sovereign - 28.1.2010, 20:52
PM MAIL   Вверх
chaos
Дата 28.1.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



ребят, еще раз повторяю, качните бинарники qml и declarative ui
позапускайте примеры из папки demo & examples. Посмотрите результат и сколько нужно сделать что добиться такого.

ИМХО очень очень и очень полезнаю штука: 1. без нее(а так же animation api + state machine) было очень тяжко. 2. для мобильных платформ само то 3. .....
PM WWW   Вверх
Amp
Дата 29.1.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я вот гляжу на http://qt.nokia.com/doc/qml-snapshot/qmlelements.html, в раздел "Basic Visual Items" - там как будто толпа котов наплакала. Как мне нарисовать эллипс или окружность (я уже не говорю о дугах)? 

P.S. Для сравнения можете посмотреть в содержимое пакета javafx.scene.shape у JavaFX.
PM MAIL   Вверх
SABROG
Дата 29.1.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Я подозреваю, что сначала им придется сделать толпу примитивов и базовых контролов, после чего им придется начать разработку аналога Macromedia Flash...


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


found myself
****


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

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



Советую почитать. Работаем с моделями в QML

Добавлено через 2 минуты и 25 секунд
А виджеты, вроде, можно через QGraphicsProxyWidget добавлять. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
SABROG
Дата 31.1.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Ничего нового я там не увидел, кроме интересной ссылки где Qt работает на embedded системе, в ТВ декодере с 30Мб ОЗУ и процессором 200МГц, довольно впечатляюще: http://www.smlabs.net/client.html

Если посмотреть на исходник кнопки button.qml (из блога), то можно увидеть сколько придется ручками поработать, чтобы такую сделать. А ведь кнопка это всего один элемент приложения. Там нет QProgressBar, QDockWidget, QSubWindow, QSlider, QComboBox, QLineEdit, QSpinBox, QDateEdit и т.д. Т.е. кто-то сначала должен это всё реализовать, причем с полным функционалом, а если еще сможет реализовать технологию смены стилей без переписывания элементов, то вообще замечательно. Т.е. захотел сделать весь интерфейс белым - пожалста, захотел черным - не вопрос. Думаю нет проблем это сделать с одной кнопкой, но если у тебя целая библиотека элементов и все используются...

Цитата

QGraphicsProxyWidget 


Хотелось бы пример на javascript (qml), т.е. полностью без использования C++. Связка QML + QMLViewer.


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


Hacker
****


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

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



Просто для сравнения, это список шейпов из JavaFx:

Код

    * Arc
    * ArcTo
    * ArcType
    * Circle
    * ClosePath
    * CubicCurve
    * CubicCurveTo
    * DelegateShape
    * Ellipse
    * FillRule
    * HLineTo
    * Line
    * LineTo
    * MoveTo
    * Path
    * PathElement
    * Polygon
    * Polyline
    * QuadCurve
    * QuadCurveTo
    * Rectangle
    * Shape
    * ShapeIntersect
    * ShapeSubtract
    * StrokeLineCap
    * StrokeLineJoin
    * SVGPath
    * VLineTo


А это из QML

Код

    * Item
    * Rectangle
    * Image
    * BorderImage
    * Text
    * TextInput
    * TextEdit


Но, тут в принципе все можно выкинуть кроме Item и Rectangle. Первый что-то вроде невидимого виджета, который группирует прямоугольники, а второй - единственный шейп. Возможно дальше будет лучше. Хотя уже сейчас я смотрю народ неплохие вещи придумывает.


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


found myself
****


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

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



SABROG, это ж бета, какие тут могут быть претензии?)

Вот сегодня я читал про клиент для vkontakte без единой строки на С++, только JS и QML. И с кнопочками разными, полями ввода, там всё ок smile 

Плюс советую посмотреть examples. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
SABROG
Дата 1.2.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(W4FhLF @  1.2.2010,  12:40 Найти цитируемый пост)
SABROG, это ж бета, какие тут могут быть претензии?)

Да это так, больше для себя. Просто думал подожду пока релиз выйдет, и правильно думал.

Цитата(W4FhLF @  1.2.2010,  12:40 Найти цитируемый пост)
Вот сегодня я читал про клиент для vkontakte без единой строки на С++, только JS и QML. И с кнопочками разными, полями ввода, там всё ок smile 

Почитал и я этот блог. Всё что я могу сказать, так это то, что это очередной демо-клон. Практически ничего нового я тут не увидел. Всё тот же черный интерфейс с IPhone-style кнопками. Даже background не удосужились поменять, содрали откуда-то, не помню уже. Всё тот же список с иконками как в демке flicker. Ну и используется весь доступный арсенал из "Basic Visual Items". Фантазии не видно.

В то время как в репозитории примеров kinetic declarative уже есть дополнительные графические элементы типа progressbar'a, tabwidget'a.
---
Упс...

user posted image

Это сообщение отредактировал(а) SABROG - 1.2.2010, 15:39


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


Шустрый
*


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

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



Цитата(SABROG @ 29.1.2010,  12:42)
Я подозреваю, что сначала им придется сделать толпу примитивов и базовых контролов, после чего им придется начать разработку аналога Macromedia Flash...

а впринципе то svg есть, встроенный скрипт тоже, остается только визуальный редактор svg и вуаля... smile  ну эт я так...
PM MAIL   Вверх
chaos
Дата 1.2.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



офтоп + придираюсь
Цитата(W4FhLF @  31.1.2010,  11:56 Найти цитируемый пост)
Советую почитать. Работаем с моделями в QML
\

статья авно полное. модели разве начинаются с XML моделей? начинающему думаю совсем не понятен смысл статьи был


PM WWW   Вверх
SABROG
Дата 1.2.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Я вот с какими трудностями столкнулся. Градиенты только вертикальные, в документации говорится - переворачивайте rect, чтобы получить горизонтальные. Если последовать их совету, то начинаются последствия. Height теперь у нас width, widht теперь height, а MouseRegion теперь возвращает внутренние координаты курсора мыши. Поднимая курсор вверх - Y координаты курсора растет, вместого того, чтобы падать, двигаем курсор вправо (по X), координата мыши Y - растет, что уже менее страшно. Я подумал и решил прибегнуть к такому ходу, создать rect, а в него впихнуть перевернутый rect с градиентом, в самом конце блока родительского rect'a создается MouseRegion, который накладывается поверх ребенка (кто последний объявлен тот на самом верху по Z), в итоге все координаты приходят нормально. Но, как например локальные координаты мыши перевести в глобальные? Как получать глобальные x,y мыши, когда происходит dragging по сцене? Я таких методов не нашел. Пока есть мысль ловить onX/YChanged, брать top left координату итема и прибавлять локальные координаты курсора на ректе.
---
Всё-таки проблема осталась. Я не могу найти способа растянуть дочерний рект на всю область родителя, после того как сделал ребенку rotate на 90 градусов. Не авторесайзится, а тупо вылазит за пределы.

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


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


Новичок



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

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



Цитата

Всё-таки проблема осталась. Я не могу найти способа растянуть дочерний рект на всю область родителя, после того как сделал ребенку rotate на 90 градусов. Не авторесайзится, а тупо вылазит за пределы.

По умолчанию origin {x;y} у Rotation - (0;0), поэтому и вылазит.

С мэпингом координат тоже не могу разобраться. Пытался копать в сторону QGraphicsWidget, засунутого в GraphicsObjectContainer. Вроде как у QGraphicsWidget должны быть функции mapTo*(), mapFrom*(), но что-то не выходит...
PM MAIL   Вверх
SABROG
Дата 2.2.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Также пытался найти способ сменить курсор у мыши средствами QML. Естественно не нашел. Думаю его и не будет, т.к. QML больше ориентирован на мобильники о чем говорит обилие скинов в qmlviewer.

Вообще есть ли какой-нибудь способ заставить родителя "поглощать" ребенка также как это делают обычные виджеты, т.е. не рисовать его полностью на экране, если он вылазит за пределы предка?
---
Еще одну особенность обнаружил. Свойство visible работает только один раз - при создании итема. Если менять его в процессе работы программы, то ничего не происходит. Свойство opacity:0 вырубает встроенный MouseRegion, поэтому на элементе с 0 прозрачностью не срабатывают onEnter и onExit.
---
Еще одна вещь. При свойстве hoverEnabled в метод onPositionChanged приходит событие даже когда мышь не двигалась, а была нажата клавиша (clicked).

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


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


Новичок



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

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



Цитата

Вообще есть ли какой-нибудь способ заставить родителя "поглощать" ребенка также как это делают обычные виджеты, т.е. не рисовать его полностью на экране, если он вылазит за пределы предка?

Ставь свойство clip в true.

Цитата

Еще одну особенность обнаружил. Свойство visible работает только один раз - при создании итема. Если менять его в процессе работы программы, то ничего не происходит. 

Код

import Qt 4.6

Rectangle {
    width: 500
    height: 500
    Rectangle {
        id: rect
        width: 200; height: 300
        anchors.centerIn: parent
        smooth: true
        gradient: Gradient {
            GradientStop { position: 0.0; color: "red" }
            GradientStop { position: 1.0; color: "blue" }
        }
        transform: Rotation {
            angle: 90
            origin.x: 100; origin.y: 150
        }
        MouseRegion {
            anchors.fill: parent
            hoverEnabled: true
            onPositionChanged: {
                console.log("x: " + mouse.x + " y: " + mouse.y)
            }
            onClicked: {
//                rect.visible = rect.visible ? false : true;
//                rect.opacity = rect.opacity == 1.0 ? 0.001 : 1.0
            }
        }
        Timer {
            interval: 500; repeat: true; running:true
            onTriggered: rect.visible = rect.visible ? false : true
        }
    }
}


В этом коде работает как надо: мигает по таймеру.

Цитата

Свойство opacity:0 вырубает встроенный MouseRegion, поэтому на элементе с 0 прозрачностью не срабатывают onEnter и onExit.

Можно ставить 0.001, вроде не заметно.
PM MAIL   Вверх
SABROG
Дата 2.2.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Твой пример у меня работает нормально. Вставляю в те же обработчики у себя - ничего не работает. Меняю visible на opacity - все работает. Мистика какая-то.

Код

import Qt 4.6

Rectangle {
    id: mainRect
    width: 200
    height: 200

    MouseRegion {
        id: mrMainRect
        anchors.fill: parent
        hoverEnabled: true
        onPositionChanged: {
            console.log('MainRect X: ' + mouse.x + ' Y: ' + mouse.y)
        }
    }

        Rectangle {
            id: Widget
            x: 10
            y: 10
            width: 117
            height: 110

            color: "#d2d6c9"
            MouseRegion {
                id: mrWidget
                anchors.fill: parent
                hoverEnabled: true

                onClicked: {
                    console.log('clicked');
                    corner.visible = corner.visible? false : true;
                }


            }

            border.width: 1
            effect: DropShadow {
                yOffset: 5
                xOffset: 5
                blurRadius: 16
            }

            Rectangle {
                id: corner
                property bool isDragging: false
                property int startDrag: 0;
                anchors.right: parent.right
                anchors.bottom: parent.bottom
                anchors.rightMargin: 2
                anchors.bottomMargin: 2
                color: 'red'
                width: 10
                height: 10
                //opacity: 0
            }

        }
}



---
Похоже нашел проблему, если убрать эффект, то всё работает:

Код

            effect: DropShadow {
                yOffset: 5
                xOffset: 5
                blurRadius: 16
            }


Это сообщение отредактировал(а) SABROG - 2.2.2010, 18:12


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


Новичок



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

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



Можно не убирать, а кое-что добавить, но получится явно костыль.
В слот onClicked mrWidget'а добавить 
Код

dsEffect.enabled = false; dsEffect.enabled = true;

где dsEffect - DropShadow
PM MAIL   Вверх
SABROG
Дата 2.2.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(revers @ 2.2.2010,  19:11)
Можно не убирать, а кое-что добавить, но получится явно костыль.
В слот onClicked mrWidget'а добавить 
Код

dsEffect.enabled = false; dsEffect.enabled = true;

где dsEffect - DropShadow

Тут какая-то проблема с перерисовкой получается, т.к. если рект подвигать, то всё отрисовывается. К сожалению я не нашел таких методов как update()/repaint(). Багрепорт отправил троллям.


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


Новичок



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

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



Цитата

Тут какая-то проблема с перерисовкой получается, т.к. если рект подвигать, то всё отрисовывается.

Эм... не понял. В чем проблема-то?
PM MAIL   Вверх
SABROG
Дата 2.2.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(revers @ 2.2.2010,  21:52)
Цитата

Тут какая-то проблема с перерисовкой получается, т.к. если рект подвигать, то всё отрисовывается.

Эм... не понял. В чем проблема-то?

В том, что при DropShadow эффекте рект перестает перерисовываться, а изменение свойства visible перерисовку не вызывает.


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


Новичок



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

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



Чуток переделал твой код. По клику меняется visible. У меня все прекрасно перерисовывается. Кстати версия декларэйтива у меня из мастер ветки.
Код

import Qt 4.6

Rectangle {
    id: mainRect
    width: 200
    height: 200

    MouseRegion {
        id: mrMainRect
        anchors.fill: parent
        hoverEnabled: true
        onPositionChanged: {
            console.log('MainRect X: ' + mouse.x + ' Y: ' + mouse.y)
        }
        onClicked: {
            console.log('clicked');
            Widget.visible = Widget.visible ? false : true;
            dsEffect.enabled = false; dsEffect.enabled = true;
        }
    }
    Rectangle {
        id: Widget
        x: 10
        y: 10
        width: 117
        height: 110
        color: "#d2d6c9"
        MouseRegion {
            id: mrWidget
            anchors.fill: parent
            hoverEnabled: true
            drag.target: Widget
            drag.axis: "XandYAxis"
            drag.minimumX: 0; drag.maximumX: 100
            drag.minimumY: 0; drag.maximumY: 100
        }
        border.width: 1
        effect: DropShadow {
            id: dsEffect
            yOffset: 5
            xOffset: 5
            blurRadius: 16
        }
        Rectangle {
            id: corner
            color: 'red'
            width: 10
            height: 10
            MouseRegion {
                anchors.fill: parent
                hoverEnabled: true
                drag.target: corner
                drag.axis: "XandYAxis"
                drag.minimumX: 1; drag.maximumX: 107
                drag.minimumY: 1; drag.maximumY: 100
            }
        }
    }
}

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


Hacker
****


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

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



Может кто видел, есть ли такая возможность присвоить геометрию одного rect'a другому, чтобы не приходилось писать портянки?

Код

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


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


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
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.1007 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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