Было работающие приложение на 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 вопроса, остальные появляться чуть позже)))
1. http://doc-snapshot.qt-project.org/qt5-release/qtquickcontrols/qtquickcontrols-index.html
2. В разных QML файлах можно делать одинаковые id.
пока что изучаю. Есть такая проблема:
При запуске приложения часто вылазит виндовское окно "прекращена работа программы", вот подробности:
Сигнатура проблемы:
Имя события проблемы: 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
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'
Возможно у тебя проблемы с OpenGL, попробуй обновить.
Кстати какая у тебя сборка Qt?
ig4icd32.dll - это акселератор видеокарты от интел для лаптопов. возможно, надо обновить драйверы материнки или видеокарты.
посмотри тут:
http://www.intel.com/support/graphics/sb/CS-031461.htm
да, в этом и была проблема. Обновил драйверы видеокарты и заработало)))
Следующая проблема с использованием QtQuick.Controls.
Есть такой код:
import QtQuick 2.1
import QtQuick.Controls 1.0
Rectangle {
width: 500
height: 360
color: "red"
}
import QtQuick 2.1
import QtQuick.Controls 1.0
Rectangle {
width: 500
height: 360
color: "red"
Button { text: "gg"}
}
И еще вопрос:
Можно ли сигнал, который в qml файле коннектить к слоту из cpp файла? Только connect нужно сделать в самом cpp файле
QQuickView *pView = new QQuickView;
QObject *pObject = pView->rootObject();
connect(pObject, SIGNAL(сигнал из QML()), получатель, SLOT(слот()));
import QtQuick 2.1
import QtQuick.Controls 1.0
Rectangle {
width: 500
height: 360
color: "red"
}
import QtQuick 2.1
import QtQuick.Controls 1.0
Rectangle {
width: 500
height: 360
color: "red"
Button { text: "gg"}
}
pView->setSource(QUrl("qrc:/QML/main.qml"));
Ответе пожалуйста не этот вопрос кто знает
Trisch,Если на пк копирую exe в другую папку, то кнопка отображается, значит, exe не зависит от остальных файлов, которые в папке с проектом.
В чем тогда проблема? Trisch,
уже довольно много времени потратил на это не получается разобраться почему то на десктопе запускается а на андроиде нет
Андроид - не венда. exe-шников там нет. он ищет файлы так же, как и любой другой линюкс: в системных папках. если ты хочешь заставить его искать файл в локальной папке, то у исполняемого файла должны быть явно прописаны пути поиска, в том числе в локальной папке. обычно это делается настройкой -Wl,-rpath=.
это настройка линковки, но куда это прилепляется в Qt я не знаю.
проверить, что проблема именно в отсутствии файла, можно просто запустив приложение с предустановленной переменной поиска LD_LIBRARY_PATH. например, так:
env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_program /path_to_program/program
думаю, это должно сработать, если он тупо не может найти файл.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)