m
12 февраля 2019 г. 14:56
mr_roman

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

Сервис разрабатываю как отдельное приложение. После сборки подключаю его в основной проект как .so библиотеку.

В сервисе пишу следующий код для запуска акселерометра: в .h файле:

private: 
    QAccelerometer *m_sensor;

в .cpp файле (в конструкторе класса):

GSensorClass::GSensorClass(QObject *parent) : QObject(parent)
{
    m_sensor = new QAccelerometer(this);
    connect(m_sensor, SIGNAL(readingChanged()),
                this, SLOT(onReadingChanged()));
    m_sensor->setAlwaysOn(true); //Должен работать постоянно, даже при выключенном экране и в фоне
    m_sensor->start(); //Вот именно здесь и появляется проблема
}

m_sensor->start(); возвращает false. При этом, если вызвать m_sensor->error(), возвращает 0. Соответственно, в слот onReadingChanged войти не удается.

В файле .pro сервиса и основного проекта добавлено - QT += sensors. В AndroidManifest.xml основного проекта добавлена строка

<uses-feature android:name="android.hardware.sensor.accelerometer" />

Если этот же код запустить в GUI-приложении под Android, все работает, координаты x,y,z удается получить. Но в сервисе (консольном приложении) метод start не срабатывает, и возвращает false.

Может быть что-то не правильно делаю? Надеюсь, что реализация получения данных от акселерометра в android-сервисе на Qt возможна? Помогите, пожалуйста, решить проблему.

7 февраля 2019 г. 17:36
Михаиллл

здравствуйте. Как загрузкить ресуры в QTextDocument

QTextDocument htmlTextDoc;
//QTextDocument *htmlTextDoc = new QTextDocument();
htmlTextDoc->loadResource(1,myUrl);

выдает ошибку: 'loadResource' is a protected member of 'QTextDocument' и еще вопрос по той же теме, если делаю так, то ничего не загружается:

ui->basedWindowTextEdit->loadResource(QTextDocument::HtmlResource,myUrl);
4 февраля 2019 г. 10:52
Михаиллл

Добрый день. Не стоит на компьютере OpenGL (старая видеокарта). Как можно прикрутить к Qt эти библиотеки, что бы заработали QML Visual Editor?

АБ
28 января 2019 г. 22:04
Александр Бардашевский

Здравствуйте. Задача сделать так, чтобы программа работала в двух потоках. Нужно искусственно слипать поток, дабы эмулировать долгие вычисления.

В первом: 1. Формируется запрос на вычисление и происходит добавление его в очередь потока 2 (при нажатии на кнопку = ). 2. Вывод результатов (например в qDebug), полученных из потока 2

Во втором (доступ к потоку 2 должен быть потокобезопасным): 1. Как завершится пред. вычисление, преступать к следующему поступившему из потока 1. 2. Извлеченный элемент отправляется на обработку. 3. Ожидание окончания 4. Передача результата в основной поток

С библиотекой QThread не знаком, + читал о нескольких способах реализации, так и не понял как сделать грамотнее.

void MainWindow::equal_pressed()
{
    double displayNumber;
    double secondNum = ui->display->text().toDouble();
    QString DisplayText;

    if (ui->pushButton_add->isChecked())
    {
        qDebug() << "New request: " << firstNum << " + " << secondNum;
        std::thread thread_2([&displayNumber,secondNum,this](){displayNumber = compute(add,firstNum,secondNum); });
        thread_2.join();                                        // это конечно неправильно, выходит тоже самое что и в одном потоке. Где-то нужно создать std::queue мб и туда помещать запросы
        DisplayText = QString::number(displayNumber,'g',15);    // только как.
        ui->display->setText(DisplayText);
        ui->pushButton_add->setChecked(false);
        qDebug() << "Result: " << displayNumber;
    }
    else if (ui->pushButton_subtract->isChecked())
    {
        qDebug() << "New request: " << firstNum << " - " << secondNum;
        displayNumber = compute(substract,firstNum,secondNum);
        DisplayText = QString::number(displayNumber,'g',15);
        ui->display->setText(DisplayText);
        ui->pushButton_subtract->setChecked(false);
        qDebug() << "Result: " << displayNumber;
    }
    else if (ui->pushButton_mult->isChecked())
    {
        qDebug() << "New request: " << firstNum << " * " << secondNum;
        displayNumber = compute(mult,firstNum,secondNum);;
        DisplayText = QString::number(displayNumber,'g',15);
        ui->display->setText(DisplayText);
        ui->pushButton_mult->setChecked(false);
        qDebug() << "Result: " << displayNumber;
    }
    else if (ui->pushButton_divide->isChecked())
    {
        qDebug() << "New request: " << firstNum << " / " << secondNum;
        try
        {
            displayNumber = compute(divide,firstNum,secondNum);;
            if (secondNum == 0.0) {throw 1; }
            DisplayText = QString::number(displayNumber,'g',15);
            ui->display->setText(DisplayText);
            ui->pushButton_divide->setChecked(false);
            qDebug() << "Result: " << displayNumber;
        }
        catch (int e)
        {
            qDebug() << "Error: You cannot divide by zero!";
        }
        ui->pushButton_divide->setChecked(false);          //чтобы можно было продолжить пользоваться программой, после деления на 0
    }

    userTypingSecondDigit = false;
}

double MainWindow::compute(int Type, double OperandA, double OperandB)
{
    switch (Type) {
        case add:
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
            return OperandA + OperandB;
        }
        case substract:
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
            return OperandA - OperandB;
        }
        case mult:
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
            return OperandA * OperandB;
        }
        case divide:
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
            return OperandA / OperandB;
        }
    }
}

Просьба помочь разобраться с данной задачей. QT для меня в новинку

28 января 2019 г. 15:20
Михаиллл

Здравствуйте? У меня есть 2 виртульных устройства Android. Но все они помечены как несовместимые, а через "Создать выиртуальное устройство" новое виртуальное устройство Android не создается. Как можно использовать виртуальное устройство Android?

27 января 2019 г. 10:17
Михаиллл

Здравствуйте. Как при чтении HTML файла отвязаться от картинок-файлов и все сохранять в одной переменной?

25 января 2019 г. 17:21
Михаиллл

Здравствуйте. Как открыть .html файл? Делаю так, но картинка превращается в странные серые квадратики:

if(!saveFile.isEmpty())
                  {
                      QFile sFile(saveFile);
                      if(sFile.open(QFile::ReadOnly | QFile::Text)){
                          QTextStream in(&sFile);
                          QString text = in.readAll();
                          sFile.close();

                          //QTextDocument textDocument;

                          ui->ResumeHHTextEdit->setHtml(text);
                          qDebug()<<text;
                      }
                  }
25 января 2019 г. 11:51
Михаиллл

Здравствуйте. Как добавить рекламу в приложения для Android?

23 января 2019 г. 9:27

Qt

Qt, QSS, Styles, Stylesheet

Войдите в удивительный мир инструментов, для которых анонс требует больше времени, чем сам инструмент.

TT
13 июня 2019 г. 19:01
Taimoor Tanweer

C++ - Тест 001. Первая программа и типы данных

  • Результат:66баллов,
  • Очки рейтинга-1
TT
13 июня 2019 г. 18:51
Taimoor Tanweer

C++ - Тест 002. Константы

  • Результат:75баллов,
  • Очки рейтинга2
ВМ
13 июня 2019 г. 12:30
Ваня Мороз

C++ - Тест 001. Первая программа и типы данных

  • Результат:100баллов,
  • Очки рейтинга10
Последние комментарии
i
17 июня 2019 г. 6:10
ingenfly

Только по осям xAxis2, уAxis2 значения начинаются с 0. Почему-то xAxis2 и xAxis не синхронизированы по данным. Ну и QCustomPlot последний.
16 июня 2019 г. 20:21
Евгений Легоцкой

Добрый день. Ну точно также добавляете ту же самую информацию на ось xAxis2, только добавляете другое форматирование customPlot->xAxis2->setDateTimeFormat("hh:mm"); если я ...
EF
14 июня 2019 г. 13:56
Egor Fomin

Спасибо за ваш ответ, у меня получилось реализовать это. Тем не менее появилась другая проблема, поэтому опять надеюсь на вашу помощь. Скажем, я уже выставил точки и они соеденены. Когда я нач...
d
13 июня 2019 г. 14:47
damix

Можно классу, который описывает точку, добавить сигнал, который подавать (emit), когда точка перемещается (переопределить mouseMoveEvent или mouseReleaseEvent). Так вот эти сигналы у каждой из...
i
13 июня 2019 г. 14:09
ingenfly

Здравствайте! Подскажите, пожалуйста: customPlot->xAxis2->setTickLabels(true); //Здесь включается отображение данных на оси xAxis2. а можно как-то продублировать информацию cus...
Сейчас обсуждают на форуме
I
19 июня 2019 г. 13:41
Intruder

Всем добрый день. При разборе XML файла наткнулся на тег вот такого плана: <TagName attribute1="value1" attribute2="value2" /> При попытке проверить на наличие такого элеме...
19 июня 2019 г. 12:55
Михаиллл

Скажите пожалуйста, как его в таком случае перемещать и удалять?
18 июня 2019 г. 19:50
Дмитрий

Большое спасибо! SDK заработал.К сожалению удалось продвинутся только на один шаг. При сборке чистого проекта NDK выдаёт следующие ошибки C:\Android\ndk-bundle/toolchains/arm-linux-andr...
18 июня 2019 г. 16:59
Михаиллл

Добрый день.В этом учебнике представлен код INSTALLED_APPS = ( ... 'rest_framework', 'snippets.apps.SnippetsConfig',) На строчке 'snippets.apps.SnippetsConf...
18 июня 2019 г. 14:24
Михаиллл

Спасибо, работает.Послушаю вашего совета.
Ищу работу?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

EVILEG
О нас
Услуги
Присоединяйтесь к нам
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB