Просмотр сообщений
|
Страниц: 1 2 3 [4] 5 6 ... 50
|
46
|
Qt / Qt Quick / Как в QML организовать приложение с портретной и ландшафтной ориентацией?
|
: Январь 09, 2018, 12:36
|
Пытаюсь сделать приложение под Андроид, экран которого состоит из двух крупных объединений экранных элементов, назовем их условно 1 и 2. В ландшафтном режиме они располагаются слева-направо, в портретном режиме должны располагаться сверху-вниз, вот как на картинке: Компоновка экранных элементовПредполагается, что ориентация задается через настройки, и ее не нужно динамически переключать в зависимости от значения гиродатчика. Вопрос такой: как сделать (каким механизмом воспользоваться) чтобы программно изменять компоновку экрана с ландшафтной на портретную и обратно? Причем надо, чтобы менялся сам экран, то есть был размером 1920x1080, а стал 1080х1920. А объединения 1 и 2 меняли бы только свои координаты, и им не требовалось поворота на 90 градусов.
|
|
|
47
|
Qt / Qt Embedded / Как редактировать AndroidManifest.xml, если он пересоздается при сборке?
|
: Январь 06, 2018, 14:27
|
Имею Qt 5.9.2, QtCreator 4.4.1. Решил прописать в AndroidManifest.xml портретную ориентацию экрана. Для этого нужно в файле AndroidManifest.xml найти свойство: android:screenOrientation="unspecified" и установить его значение в "portrait". Сам файл AndroidManifest.xml я нашел в каталоге ../build-GeoPosition-Android_armeabi_v7a_GCC_4_9_Qt_Qt_5_9_2_for_Android_armv7-Debug/android-build Но проблема в том, что даже если я изменяю этот файл, и нажимаю пересборку проекта, данный файл пересоздается, и мои настройки пропадают. Вопрос: как редактировать файл AndroidManifest.xml так, чтобы настройки в нем сохранялись даже при пересборке проекта?
|
|
|
49
|
Qt / Qt Quick / Re: Почему не работает position.direction для PositionSource?
|
: Январь 05, 2018, 22:48
|
А вот direction и magneticVariation - все время показывают NaN, хоть двигайся хоть стой на месте.
Вы на машине двигались или ногами три шага туда - три шага сюда? Ногами по балкону 7 м длинной. 4 сутника активны, думал что этого достаточно. Вышел на улицу, заpаботал direction. magneticVariation как не работал, так и не работает. Но видимо, хоть в хоноре и есть магнитный датчик, магнитное склонние он не реализует. А мне нужно было просто азимут получать, пока не понял как его выдергивать.
|
|
|
50
|
Qt / Qt Quick / [Решено] Почему не работает position.direction для PositionSource?
|
: Январь 05, 2018, 18:58
|
Решил посмотреть, как работает геопозиционирование в Qt. Использую Qt 5.9.2. Сделал QtQuick2 приложение, прописал в *.pro файл: В main.qml добавил: import QtPositioning 5.4 ... Text { id: labelLongitude
anchors.left: parent.left anchors.top: parent.top
font.family: "Helvetica" font.pointSize: 24 }
Text { id: labelLatitude
anchors.left: parent.left anchors.top: labelLongitude.bottom
font.family: "Helvetica" font.pointSize: 24 }
Text { id: labelSpeed
anchors.left: parent.left anchors.top: labelLatitude.bottom
font.family: "Helvetica" font.pointSize: 24 }
Text { id: labelDirection
anchors.left: parent.left anchors.top: labelSpeed.bottom
font.family: "Helvetica" font.pointSize: 24 }
Text { id: labelMagneticVariation
anchors.left: parent.left anchors.top: labelDirection.bottom
font.family: "Helvetica" font.pointSize: 24 }
PositionSource { id: positionSource updateInterval: 1000 active: true
onPositionChanged: { var coord = positionSource.position.coordinate; console.log("Coordinate:", coord.longitude, coord.latitude);
labelLongitude.text=qsTr("Longitude: ")+(coord.longitude); labelLatitude.text=qsTr("Longitude: ")+(coord.latitude);
labelSpeed.text=qsTr("Speed: ")+positionSource.position.speed; labelDirection.text=qsTr("Direction: ")+positionSource.position.direction; labelMagneticVariation.text=qsTr("Magnetic Variation: ")+positionSource.position.magneticVariation; } } И запустил на телефоне Honor 6 (H60-L04). В результате широта, долгота и скорость показываются нормально. А вот direction и magneticVariation - все время показывают NaN, хоть двигайся хоть стой на месте. Вопрос. Почему так, и как исправить чтобы эти значения нормально вытягивались из датчиков?
|
|
|
52
|
Qt / Пользовательский интерфейс (GUI) / [Решено] QProgressDialog блокирует текстовые поля ввода (даже видео есть)
|
: Декабрь 23, 2017, 15:19
|
Долго бился с QProgressDialog в Qt 5.9.2. Пока не сделал минимальный пример, и не увидел что даже в нем у QProgressDialog присутствует баг. Вообще, QProgressDialog - довольно странный компонент. У него уже была пара багов Qt 5.5 - 5.6.x QTBUG-47042 QTBUG-47049, и вот сейчас еще один, новый. Но возможно, что это я что-то неправильно делаю, поэтому пишу сюда, может быть бага и нет. Значит, программа состоит из главного окна, текстового поля и кнопки Find. Текстовое поле просто лежит на форме и ни с чем не связано. В обработчике клика по Find пишу такой код: void MainWindow::on_findButton_clicked() { long int totalRec=1000;
// Показывается виджет линейки наполняемости progress->reset(); progress->setLabelText( tr("Search...") ); progress->setRange(0, totalRec); progress->setModal(true); progress->setMinimumDuration(0); progress->show();
for(long int i=0; i<totalRec; i++) { progress->setValue(i); qApp->processEvents();
if(progress->wasCanceled()) break; }
progress->hide(); progress->cancel(); // Добавлено из-за регрессии, посмотреть как работает } И если несколько раз понажимать на кнопку Find, заблокируется поле ввода. И если сделать несолько полей ввода на главном окне, заблокируются все. Без разницы QLineEdit или QTextEdit. Текст можно в них выбирать, а вот изменить нельзя. И так будет продолжаться до тех пор, пока не переключишься на другое окно и не вернешься обратно. Тут важно, что QProgressDialog настраивается модальным, и нельзя нажать кнопку Find еще раз, пока показывается прогресс бар. Кроме того, я несколько раз ловил ситуацию, что достаточно одного нажатия, чтоб заблокировались текстовые поля. Но для этого нужно чем-нибудь загрузить систему и поиграться со значением totalRec. Как можно обойти этот баг? Минимальный пример: http://rgho.st/68kYmnGngВидео: https://www.youtube.com/watch?v=D2x6Cvic0fQ&feature=youtu.beUPD: Можно просто медленно и раздельно понажимать мышкой на кнопку Find и на поле ввода. У меня после пяти раз поле ввода заблокировалось.
|
|
|
53
|
Qt / Установка, сборка, отладка, тестирование / Re: Qt Creator - не могу добавить к проекту внутреннюю (Internal) библиотеку
|
: Декабрь 21, 2017, 16:41
|
Кароч, подключить либу к проекту через интерфейс не удалось. Вместо этого пришлось создать следующее: 1. Перенести всё содержимое файла QGumboParserSample.pro в новый файл app.pro 2. А содержимое файла QGumboParserSample.pro сделать таким: TEMPLATE = subdirs SUBDIRS += lib/QGumboParser \ app.pro То есть, пришлось создать "общий" файл, а из него уже подключить и файл проекта app.pro и каталог библиотеки. Чтобы шла нормальная линковка, содержимое файла app.pro стало таким: QT -= gui QT += network
CONFIG += c++11 console CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp
LIBS += -L./lib/QGumboParser -lQGumboParser Так же в исходниках не подключились файлы #include <qgumbodocument.h> #include <qgumbonode.h> поэтому пришлось написать вот так: #include <./lib/QGumboParser/qgumbodocument.h> #include <./lib/QGumboParser/qgumbonode.h>
|
|
|
54
|
Qt / Установка, сборка, отладка, тестирование / Qt Creator - не могу добавить к проекту внутреннюю (Internal) библиотеку
|
: Декабрь 21, 2017, 14:47
|
Имею Qt 5.9.2 и Qt Creator 4.4.1, Linux Debian 64 bit Пытаюсь сделать все по вот этой статье: https://toster.ru/q/168437Сделал основной проект в каталоге, например QGumboParserSampleSrc. В нем создал через git подкаталог lib, в котором лежит QGumboParser.pro, README.md и прочее. В проекте *.pro прописал: SUBDIRS += libs/QGumboParser Далее нажимаю ПКМ на заголовке проекта, выбираю «Добавить библиотеку». Выбираю «Внутренняя», и мне открывается вот такое окно: http://i.piccy.info/i9/8448938026d6329ecae1216192b41a8c/1513855996/64066/1202516/scr0034.pngПоле «Библиотека» не разворачивается, оно может быть только пустым. Поле «Путь к заголовочным файлам» заполнял всеми возможным способами - указывал (через выбор директории) и lib, и lib/QGumboParser и lib/QGumboParser/gumbo-parser и lib/QGumboParser/gumbo-parser/src. Но какой каталог не указывай, поле «Библиотека» не заполняется, и видимо из-за этого не нажимается кнопка «Далее». Я подумал, может нужны объектники, и запустил в каталоге lib qmake QGumboParser.pro make Собралось без ошибок. Но после этого тоже ничего не поменялось: подключить библиотеку не могу. Как ее вообще подключать?
|
|
|
55
|
Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так?
|
: Ноябрь 30, 2017, 15:38
|
Рабочий пример.
Ага, вижу. Вы сделали так, что объект размещается в треде один раз, а потом просто перезапускается. А я думал, что при остановке треда происходит завершение треда... Вот сейчас смотрю, и вижу, что метода, обратного moveToThread просто нет. То есть, по сути, если объект класса QThread у нас на стеке, то проинитить мы его можем один только раз... Хотя нет, мы же можем засунуть в этот тред другой объект... А почему тот же самый не можем заново засунуть?
|
|
|
57
|
Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так?
|
: Ноябрь 30, 2017, 14:49
|
doExit завершает выполнения метода run MoveDetector'а, а после этого запускается цикл обработки событий самой нитки (в QThread::run вызывается метод exec()). Вот второй quit будет завершать его.
Не понял. То есть, у меня из-за того, что MoveDetector::run() имеет бесконечный цикл, то обработки событий нитки вообще не происходило? Ваше исправление: moveDetector.doExit(); moveDetectorThread.quit(); moveDetectorThread.wait(); работает, но только один раз. Если снова запустить поток, то при нажатии Stop ничего происходить не будет, поток как работал, так и продолжит работать. Вот это мне непонятно.
|
|
|
|
|