Russian Qt Forum
Май 05, 2024, 15:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 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 так, чтобы настройки в нем сохранялись даже при пересборке проекта?

48  Qt / Qt Quick / Re: Почему не работает position.direction для PositionSource? : Январь 05, 2018, 23:58
 Ага, значит походу азимута в типе PositionSource просто нет. Его надо брать из типа Compass.
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 файл:

Код:
QT += quick positioning

В 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, хоть двигайся хоть стой на месте.

Вопрос. Почему так, и как исправить чтобы эти значения нормально вытягивались из датчиков?
51  Qt / Пользовательский интерфейс (GUI) / Re: Что делать? QProgressDialog блокирует текстовые поля ввода (даже видео есть) : Декабрь 25, 2017, 11:06
в макос 10.12.6 на 4.8.7 и 5.6.2 все работает прекрасно и после 20 нажатий, прогресс тоже видно в течение секунды

Кароч, QProgressDialog не подходит для многоразового использования. Его надо каждый раз перед тем как показывать прогресс выполнения создавать, и потом сразу удалять. Тогда бага нет.
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.be

UPD: Можно просто медленно и раздельно понажимать мышкой на кнопку 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 у нас на стеке, то проинитить мы его можем один только раз... Хотя нет, мы же можем засунуть в этот тред другой объект... А почему тот же самый не можем заново засунуть?
56  Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так? : Ноябрь 30, 2017, 15:17
Коннекты и перемещение в нить нужно в конструктор вынести

В конструтор чего? В конструктор MoveDetector или MainWindow?

Чем плохи коннекторы и перемещение, вызываемые при нажатии кнопки?
57  Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так? : Ноябрь 30, 2017, 14:49
doExit завершает выполнения метода run MoveDetector'а, а после этого запускается цикл обработки событий самой нитки (в QThread::run вызывается метод exec()).
Вот второй quit будет завершать его.

Не понял. То есть, у меня из-за того, что MoveDetector::run() имеет бесконечный цикл, то обработки событий нитки вообще не происходило?

Ваше исправление:

moveDetector.doExit();
moveDetectorThread.quit();
moveDetectorThread.wait();

работает, но только один раз. Если снова запустить поток, то при нажатии Stop ничего происходить не будет, поток как работал, так и продолжит работать. Вот это мне непонятно.
58  Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так? : Ноябрь 30, 2017, 14:34
Давайте попробуем так: Улыбающийся
Код
C++ (Qt)
   moveDetector.doExit();
//    while(!moveDetectorThread.isFinished()) {
//        qDebug() << "Wait finished move detector...";
//   }
   moveDetectorThread.wait();
 

Сделал:

Код:
    moveDetector.doExit();
    moveDetectorThread.wait();
    qDebug() << "Success finish.";

Проблема практически все та же - поток останавливается, но окно перестает отвечать. И сообщения о завершении нет.
59  Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так? : Ноябрь 30, 2017, 14:23
Кто родитель у moveDetector?

QObject
60  Qt / Многопоточное программирование, процессы / Re: Сегфолт при завершении работы потока QThread - что не так? : Ноябрь 30, 2017, 14:22
Кстати, это тоже не нужно:
Код
C++ (Qt)
connect(&moveDetector, SIGNAL(finished()), &moveDetectorThread, SLOT(quit()));
 

Добавил в топик готовый минимальный пример, чтоб обсуждение было более предметно.
Страниц: 1 2 3 [4] 5 6 ... 50

Страница сгенерирована за 0.094 секунд. Запросов: 23.