Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Несколько вопросов от новичка
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Quick
MishaUA
Было работающие приложение на Qt5, работающее под виндой и андроидом, все было норм, но заказчику сильно захотелось красивую форму, соответственно, теперь нужно переделать отображение на QML.
Итак, что делает програмка:
Есть QTabWidget и QPushButton. Но нажатию QPushButton создается новая вкладка на QTabWidget и заполняется остальными виджетами: QcheckBox, QSpinEdit, QDoubleSpinEdit, QPushButton, QgroupBox и т.д.
Собственно, это мне надо переделать на QML. Сутки изучая материалы с инета, я решил использовать Qt Quick 2.0.
Стоит отметить, что со скриптовыми языками практически не знаком, последний раз использовал JavaScripts несколько лет назад, но поизучав доки Qt Quick немного въехал в курс дела.
Вопросы:
1. Нужно ли все контролы (типа QTabWidget, QDoubleSpinEdit и т.д.) создавать вручную? Где то читал, что в Qt Quick 2.0 есть что то подобное готовым виджетам, в которых можно руками изменить что угодно.
2. Можно ли в разных QML файлах делать одинаковым id компонента?

Это только 2 вопроса, остальные появляться чуть позже)))
Trisch
1. Если я правильно все понял, то можно не создавать

2. В разных QML файлах можно делать одинаковые id.
MishaUA
пока что изучаю. Есть такая проблема:
При запуске приложения часто вылазит виндовское окно "прекращена работа программы", вот подробности:
Сигнатура проблемы:
  Имя события проблемы:    APPCRASH
  Имя приложения:    qml3.exe
  Версия приложения:    0.0.0.0
  Отметка времени приложения:    51f8f74c
  Имя модуля с ошибкой:    ig4icd32.dll
  Версия модуля с ошибкой:    8.15.10.1892
  Отметка времени модуля с ошибкой:    4a9eb9c4
  Код исключения:    c0000005
  Смещение исключения:    00031fa6
  Версия ОС:    6.1.7601.2.1.0.256.1
  Код языка:    1049
  Дополнительные сведения 1:    0a9e
  Дополнительные сведения 2:    0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:    0a9e
  Дополнительные сведения 4:    0a9e372d3b4ad19135b953a78882e789

Собственно, проблема в какой то ig4icd32.dll, но в инете нигде не нашел упоминания об проблемах qlm из-за ig4icd32.dll. Причем, если запускаю скомпилированый файл, то но может запуститься, а может и нет. Если просто пытаюсь его несколько раз запустить, то запускается обычно с 3-5 раза.
Если запускаю с QtCreatora, то в логе еще появляется вот что:
QML debugging is enabled. Only use this in a safe environment.
getProcAddress: Unable to resolve 'glGenFramebuffers'
getProcAddress: Unable to resolve 'glGenFramebuffersOES'
getProcAddress: Unable to resolve 'glGenFramebuffersARB'
getProcAddress: Unable to resolve 'glBindFramebuffer'
getProcAddress: Unable to resolve 'glBindFramebufferOES'
getProcAddress: Unable to resolve 'glBindFramebufferARB'

Но если программа запускается, то вроде бы работает нормально
Trisch
Возможно у тебя проблемы с OpenGL, попробуй обновить.
Кстати какая у тебя сборка Qt?
Iron Bug
ig4icd32.dll - это акселератор видеокарты от интел для лаптопов. возможно, надо обновить драйверы материнки или видеокарты.
посмотри тут:
http://www.intel.com/support/graphics/sb/CS-031461.htm
MishaUA
да, в этом и была проблема. Обновил драйверы видеокарты и заработало)))
Следующая проблема с использованием QtQuick.Controls.
Есть такой код:
import QtQuick 2.1
import QtQuick.Controls 1.0

Rectangle {
    width: 500
    height: 360
    color: "red"
}

Как видите, тупо красный прямоугольник. На компе запускается правильно, на андроиде тоже. Если добавляю кнопку из QtQuick.Controls :
import QtQuick 2.1
import QtQuick.Controls 1.0

Rectangle {
    width: 500
    height: 360
    color: "red"
    Button { text: "gg"}
}

То на ПК она отображается, а на андроиде просто белый прямоугольник.
Стоит учесть, что qml файл находится в ресурсах.
Если на пк копирую exe в другую папку, то кнопка отображается, значит, exe не зависит от остальных файлов, которые в папке с проектом.
В чем тогда проблема?
MishaUA
И еще вопрос:
Можно ли сигнал, который в qml файле коннектить к слоту из cpp файла? Только connect нужно сделать в самом cpp файле
Trisch
Цитата(MishaUA @ 2.8.2013, 21:06) *
И еще вопрос:
Можно ли сигнал, который в qml файле коннектить к слоту из cpp файла? Только connect нужно сделать в самом cpp файле


Да, можно. Это делается примерно так:

QQuickView *pView = new QQuickView;
QObject *pObject = pView->rootObject();
connect(pObject, SIGNAL(сигнал из QML()), получатель, SLOT(слот()));


Цитата(MishaUA @ 2.8.2013, 13:38) *
да, в этом и была проблема. Обновил драйверы видеокарты и заработало)))
Следующая проблема с использованием QtQuick.Controls.
Есть такой код:
import QtQuick 2.1
import QtQuick.Controls 1.0

Rectangle {
    width: 500
    height: 360
    color: "red"
}

Как видите, тупо красный прямоугольник. На компе запускается правильно, на андроиде тоже. Если добавляю кнопку из QtQuick.Controls :
import QtQuick 2.1
import QtQuick.Controls 1.0

Rectangle {
    width: 500
    height: 360
    color: "red"
    Button { text: "gg"}
}

То на ПК она отображается, а на андроиде просто белый прямоугольник.
Стоит учесть, что qml файл находится в ресурсах.
Если на пк копирую exe в другую папку, то кнопка отображается, значит, exe не зависит от остальных файлов, которые в папке с проектом.
В чем тогда проблема?


ну тут ты мог указать полный путь к QML файлу, тогда на компе оно будет работать из любого места.

если файл QML берется из ресурсов, то это делается примерно так
pView->setSource(QUrl("qrc:/QML/main.qml"));
MherX
Ответе пожалуйста не этот вопрос кто знает
Trisch,Если на пк копирую exe в другую папку, то кнопка отображается, значит, exe не зависит от остальных файлов, которые в папке с проектом.
В чем тогда проблема? Trisch,
уже довольно много времени потратил на это не получается разобраться почему то на десктопе запускается а на андроиде нет

Цитата(MherX @ 3.9.2013, 14:51) *
То на ПК она отображается, а на андроиде просто белый прямоугольник.

Iron Bug
Андроид - не венда. exe-шников там нет. он ищет файлы так же, как и любой другой линюкс: в системных папках. если ты хочешь заставить его искать файл в локальной папке, то у исполняемого файла должны быть явно прописаны пути поиска, в том числе в локальной папке. обычно это делается настройкой -Wl,-rpath=.
это настройка линковки, но куда это прилепляется в Qt я не знаю.

проверить, что проблема именно в отсутствии файла, можно просто запустив приложение с предустановленной переменной поиска LD_LIBRARY_PATH. например, так:
env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_program /path_to_program/program
думаю, это должно сработать, если он тупо не может найти файл.
MherX
Цитата(Iron Bug @ 5.9.2013, 0:29) *
проверить, что проблема именно в отсутствии файла, можно просто запустив приложение с предустановленной переменной поиска LD_LIBRARY_PATH. например, так:
env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_program /path_to_program/program
думаю, это должно сработать, если он тупо не может найти файл.


тел на андроиде не линкукс чтобы на нем запустить что то из командной строки, там ее просто нет! а если даже установить эмулятор терминала там нет команды env!

Я сейчас опишу всю ситуацию чтобы все было ясно! Ну вот смотрите
1. создоем проект по умолчанию который qt quick 2 как предлагает IDE (Qt Creator) у меня стоит последний релиз на сегодняшний день!
2.собираем и запускаем, все работает на ура!
3.меняем код и - УПС!

вот собственно вопрос - почему так ? там даже не реагирует на изменения цвета фона ! в путях проблем точно нет
Litkevich Yuriy
Цитата(MherX @ 11.9.2013, 12:54) *
тел на андроиде не линкукс чтобы на нем запустить что то из командной строки, там ее просто нет!
есть какая-то утилита под ПК, с помощью которой проги заливают на андроид, разве там нет удалённой консоли?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.