Форум программистов, компьютерный форум, киберфорум
QML
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 11.02.2013
Сообщений: 99
1

Компиляция под Android QML import

16.03.2018, 11:07. Просмотров 1448. Ответов 3
Метки нет (Все метки)

Помогите решить проблему с ошибкой, при компиляции под андроид не регистрирует пользовательский тип.
Создал новый проект добавил файлы, зарегистрировал тип и после компиляции выдает
------------------------------------------------
Total time: 6.241 secs
Android package built successfully in 12.651 ms.
-- File: C:/Users/AmigoO/Documents/build-untitled-Android_x86_GCC_4_9_Qt_Qt_5_10 _0_for_Android_x86-Debug/android-build//build/outputs/apk/android-build-debug.apk
Warning: QML import could not be resolved in any of the import paths: CppToQml
10:57:33: Процесс «C:\Qt\Qt5.10.0\5.10.0\android _x86\bin\androiddeployqt.exe» завершился успешно.
10:57:33: Прошло времени: 00:14.
Файл *.pro
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
QT += quick serialport
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp \
    serialport.cpp
 
RESOURCES += qml.qrc
QML_IMPORT_PATH =
QML_DESIGNER_IMPORT_PATH =
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
    serialport.h
Файл main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "serialport.h" 
int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
 
    QGuiApplication app(argc, argv);
 
    QQmlApplicationEngine engine;
    qmlRegisterType<SerialPort>("CppToQml", 1, 0, "SerialPort");
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
 
    return app.exec();
}
Файл main.qml
Javascript
1
2
3
4
5
6
7
8
9
import QtQuick 2.10
import QtQuick.Window 2.10
import CppToQml 1.0
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2018, 11:07
Ответы с готовыми решениями:

Компиляция приложений opengl под android
Есть установленный qt-opensource-windows-x86-android-5.8.0.exe. Примеры без opengl (например Qt...

Import QML-файла
Я создал qml файл Button.qml,где описал нужную мне кнопку.Этот файл находится в папке Core,в корне...

Компиляция *.qml на C++
Добрый день. Отказывается компилироваться .qml файл, который я пытаюсь запустить из СPP. Ошибки...

QML + Image + Android
Загружать заранее расположенную в ресурсах картинку у меня получается, делаю это так: Image { ...

3
175 / 139 / 56
Регистрация: 08.04.2010
Сообщений: 804
16.03.2018, 12:02 2
Это не ошибка, а предупреждения. Что то не работает?
0
39 / 37 / 7
Регистрация: 21.05.2012
Сообщений: 198
16.03.2018, 12:19 3
Что то мне подсказывает, что зря автор использует serialport в Android. Но, будем посмотреть что из этого выйдет..
0
1 / 1 / 1
Регистрация: 11.02.2013
Сообщений: 99
16.03.2018, 13:27  [ТС] 4
Тут дело даже не в сериал Порт, любой qmlRegisterType не регистрирует.
И да, не работает , он компилит, а все что связано с зарегистрированным типом и его работой - не работает

Добавлено через 32 минуты
Вот вариант с другим, тоже самое
Файл *.pro
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
TEMPLATE = app
QT += qml quick quickcontrols2
CONFIG += c++11
SOURCES += main.cpp \
    dialitem.cpp
RESOURCES += qml.qrc
QML_IMPORT_PATH =
include(deployment.pri)
HEADERS += \
    dialitem.h
Файл deployment.pri
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
unix:!android {
    isEmpty(target.path) {
        qnx {
            target.path = /tmp/$${TARGET}/bin
        } else {
            target.path = /opt/$${TARGET}/bin
        }
        export(target.path)
    }
    INSTALLS += target
}
 
export(INSTALLS)
Файл dialitem.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef DIALITEM_H
#define DIALITEM_H
 
#include <QQuickPaintedItem>
 
class DialItem : public QQuickPaintedItem
{
    Q_OBJECT
 
    Q_PROPERTY(int startAngle READ getStartAngle WRITE setStartAngle NOTIFY startAngleChanged)
    Q_PROPERTY(qreal spanAngle READ getSpanAngle WRITE setSpanAngle NOTIFY spanAngleChanged)
    Q_PROPERTY(int dialWidth READ getDialWidth WRITE setDialWidth NOTIFY dialWidthChanged)
    Q_PROPERTY(QColor dialColor READ getDialColor WRITE setDialColor NOTIFY dialColorChanged)
public:
    DialItem(QQuickItem *parent = 0);
    void paint(QPainter *painter);
 
    int getStartAngle() {return m_StartAngle;}
    qreal getSpanAngle() {return m_SpanAngle;}
    int getDialWidth() {return m_DialWidth;}
    QColor getDialColor() {return m_DialColor;}
 
    void setStartAngle(int angle) {m_StartAngle = angle; this->update();}
    void setSpanAngle(qreal angle) {m_SpanAngle = angle; this->update();}
    void setDialWidth(int angle) {m_DialWidth = angle; this->update();}
    void setDialColor(QColor color) {m_DialColor = color; this->update();}
 
signals:
    void startAngleChanged();
    void spanAngleChanged();
    void dialWidthChanged();
    void dialColorChanged();
 
public slots:
 
private:
    int m_StartAngle;
    qreal m_SpanAngle;
    int m_DialWidth;
    QColor m_DialColor;
};
 
#endif // DIALITEM_H
Файл dialitem.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <QTime>
#include <QPainter>
 
#include "dialitem.h"
 
#define PI 3.14159265
 
 
DialItem::DialItem(QQuickItem *parent)
    : QQuickPaintedItem(parent)
{
    m_StartAngle = 0;
    m_SpanAngle = 180;
    m_DialWidth = 4;
    m_DialColor = QColor(0, 0, 0);
    connect(this, SIGNAL(startAngleChanged()), this, SLOT(update()));
    connect(this, SIGNAL(spanAngleChanged()), this, SLOT(update()));
    connect(this, SIGNAL(dialWidthChanged()), this, SLOT(update()));
    connect(this, SIGNAL(dialColorChanged()), this, SLOT(update()));
}
 
void DialItem::paint(QPainter *painter)
{
    QRectF rect = this->boundingRect();
    painter->setRenderHint(QPainter::Antialiasing);
    QPen pen = painter->pen();
    pen.setColor(Qt::black);
 
    //Draw outer dial
    painter->save();
    pen.setWidth(m_DialWidth);
    pen.setColor(m_DialColor);
    painter->setPen(pen);
    double startAngle = -90 - m_StartAngle;
    double spanAngle = 0 - m_SpanAngle;
    qreal offset = m_DialWidth / 2;
    painter->drawArc(rect.adjusted(offset, offset, -offset, -offset), startAngle * 16, spanAngle * 16);
    painter->restore();
 
    //Draw major ticks
    painter->save();
    pen.setWidth(4);
    painter->translate(width() / 2, height() / 2);
    painter->rotate(-startAngle);
    painter->setPen(pen);
    qreal angleStep = m_SpanAngle / 10;
    for(int i = 0; i < 11; ++i)
    {
        painter->drawLine(rect.width()/2 - 30, 0, rect.width()/2 - 2, 0);
        painter->rotate(angleStep);
    }
    painter->translate(-width() / 2, -height() / 2);
    painter->restore();
 
    //Draw minor ticks
    painter->save();
    pen.setWidth(2);
    painter->translate(width() / 2, height() / 2);
    painter->rotate(-startAngle);
    painter->setPen(pen);
    int minorTicks = 8* 10;
    qreal angleStepMin = m_SpanAngle / minorTicks;
    for(int i = 0; i < minorTicks; ++i)
    {
        painter->drawLine(rect.width()/2 - 15, 0, rect.width()/2 - 2, 0);
        painter->rotate(angleStepMin);
    }
    painter->translate(-width() / 2, -height() / 2);
    painter->restore();
 
    //Draw numbers
    painter->save();
    pen.setColor(Qt::white);
    painter->setPen(pen);
    const int radius = rect.width()/2 - 45;
    QFontMetrics fontMat(painter->font());
    QString numbr;
    for (double i = 0; i <= m_SpanAngle; i += m_SpanAngle/10)
    {
        QPoint p(rect.center().x() + radius * cos(-90-i * PI / 180.0), rect.center().y() - radius * sin(-90-i * PI / 180.0));
        numbr = QString::number(i);
        QRect bound = fontMat.boundingRect(numbr);
        painter->drawText(QPointF((p.x() - bound.width()/2), (p.y() + bound.height()/2)), numbr);
    }
    painter->restore();
}
Файл main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <QGuiApplication>
#include <QQmlApplicationEngine>
 
#include "dialitem.h"
 
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
 
    qmlRegisterType<DialItem>("IVIControls", 1, 0, "DialItem");
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
 
    return app.exec();
}
и подключение в main.qml
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Controls 1.2
import IVIControls 1.0 
 
ApplicationWindow {
    visible: true
    width: 800
    height: 480 
    Rectangle {
        anchors.fill: parent
        color: "#303030"
 
        Text {
            id: text1
            x: 8
            y: 8
            color: "red"
            text: cppClass.serial_data/5
            font.pixelSize: 12
        }
    }
 
    DialItem {
        id: speed
        objectName: "speed"
        width: 350
        height: width
        anchors.centerIn: parent
        startAngle: 30
        spanAngle: 300
        dialWidth: 4
        dialColor: "#4646FF"
 
        Image {
            id: needle
            source: "qrc:/images/needle.png"
            anchors.centerIn: parent
 
            rotation: 39 + cppClass.serial_data/15  //30 + slider.value
            Behavior on rotation { SpringAnimation { spring: 2; damping: 0.2 } }
        }
    }
 
    Slider {
        id: slider
        anchors.top: speed.bottom
        anchors.horizontalCenter: parent.horizontalCenter
        width: 400
        minimumValue: 0
        maximumValue: 300
    }
}
-- It can now be run from the selected device/emulator.
-- File: C:/AmigoNator/build-IVIDemo-Android_x86_GCC_4_9_Qt_Qt_5_10 _0_for_Android_x86-Debug/android-build//build/outputs/apk/android-build-debug.apk
Warning: QML import could not be resolved in any of the import paths: IVIControls
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private.CppUtil s
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private.CppUtil s
Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.impl
Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Fusion.impl
Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Imagine.impl
Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Material.impl
Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Universal.imp l

13:25:35: Процесс «C:/Qt/Qt5.10.0/5.10.0/android_x86/bin/androiddeployqt.exe» завершился успешно.
13:25:35: Загрузка файлов, необходимых для отладки.
13:25:35: Установка пакета: Выполнение команды «C:/android/android-sdk/platform-tools/adb.exe -s emulator-5554 pull /system/bin/app_process32 C:/AmigoNator/build-IVIDemo-Android_x86_GCC_4_9_Qt_Qt_5_10 _0_for_Android_x86-Debug/app_process».
13:25:35: Установка пакета: Выполнение команды «C:/android/android-sdk/platform-tools/adb.exe -s emulator-5554 pull /system/lib/libc.so C:/AmigoNator/build-IVIDemo-Android_x86_GCC_4_9_Qt_Qt_5_10 _0_for_Android_x86-Debug/libc.so».
13:25:37: Прошло времени: 01:41.
Ну и соответственно - не работает все то, что прописано в dialitem.cpp
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2018, 13:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

QT + QML + WebView+ Android
Разворачиваю WebView во весь экран. Пытаюсь отловить нажатие на экран. Keys.onPressed,...

Qt QML Android how to use mobile?
Здравствуйте! Подскажите пож-та тут или направьте где можно почитать\посмотреть как в qt или QML...

Разрешение экрана Android QML
Добрый день! Начал разбираться в qt под android и вот возник вопрос. Как сделать нормальную...

Android Launcher + QML + WebWiew
Пишу приложение-лаунчер для андроида и твориться какая-то чертовщина. Просто так приложение отлично...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.