Как создать межплатформенное Сенсорное приложение Ubuntu без qmlscene?

Я изучил C++ и QT, чтобы смочь создать межплатформенные приложения.

Мне создали очень простое приложение как исполняемый файл, который работает на рабочем столе, но я не могу выяснить, как заставить его работать над моим телефоном Ubuntu.

Все примеры приложения, которые я нашел, выполняются через qmlscene, но мне не нравится тот подход, потому что я хочу сделать свое выполнение приложения на всей ОС поддерживаемым QT.

Вот код:

  • CMakeLists.txt

    project(testapp)
    cmake_minimum_required(VERSION 2.8)
    
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    
    find_package(Qt5Core  REQUIRED)
    find_package(Qt5Gui   REQUIRED)
    find_package(Qt5Qml   REQUIRED)
    find_package(Qt5Quick REQUIRED)
    
    add_executable(${PROJECT_NAME} main.cpp main.qrc)
    qt5_use_modules(${PROJECT_NAME} Core Gui Qml Quick)
    
    install(TARGETS ${PROJECT_NAME} DESTINATION .)
    
    if(UNIX)
        add_subdirectory(ubuntu-package)
    endif(UNIX)
    
  • ubuntu-package/CMakeLists.txt

    set(UBUNTU_MANIFEST_PATH "manifest.json.in" CACHE INTERNAL "Tells QtCreator location and name of the manifest file")
    
    set(APP_NAME    "${PROJECT_NAME}")
    set(APP_ID      "${PROJECT_NAME}.anonymous")
    set(ICON        "${PROJECT_NAME}.png")
    set(EXEC        "${PROJECT_NAME}")
    
    install(FILES "${PROJECT_NAME}.apparmor" "${ICON}" DESTINATION .)
    
    configure_file(manifest.json.in ${CMAKE_CURRENT_BINARY_DIR}/manifest.json)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifest.json DESTINATION .)
    
    set(DESKTOP_FILE_NAME "${PROJECT_NAME}.desktop")
    configure_file(${DESKTOP_FILE_NAME}.in ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE_NAME})
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE_NAME} DESTINATION .)
    
  • main.cpp

    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
    
        QQmlApplicationEngine engine;
        engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    
        return app.exec();
    }
    
  • main.qml

    import QtQuick 2.4
    import QtQuick.Window 2.1
    import Ubuntu.Components 1.3
    
    Window {
        minimumHeight: units.gu(80)
        minimumWidth: minimumHeight
        MainView {
            applicationName: "simpleapp"
            anchors.fill: parent
            Page {
                Button {
                    anchors.centerIn: parent
                    text: "Quit"
                    onClicked: Qt.quit()
                }
            }
        }
        Component.onCompleted: show()
    }
    

Полный исходный код

Когда я пытаюсь создать его в спокойном Создателе для armhf набор, это бросает ошибки:

CMakeFiles/testapp.dir/main.cpp.o: undefined reference to symbol '__cxa_end_cleanup@@CXXABI_1.3'
/var/lib/lxd/containers/device-armhf/rootfs/usr/lib/arm-linux-gnueabihf/libstdc++.so.6 error: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
0
задан 25 September 2016 в 18:54

1 ответ

Приложения, которые находятся по телефону Ubuntu, являются открытым исходным кодом. Большинство из них не использует qmlscene. Терминал, например: http://bazaar.launchpad.net/~ubuntu-terminal-dev/ubuntu-terminal-app/trunk/files

можно клонировать тот репозиторий, скомпилировать себя и видеть, как он сделан.

Что касается undefined reference to symbol '__cxa_end_cleanup@@CXXABI_1.3' - кажется, что набор инструментальных средств делает что-то не так. В CMake настройки устанавливают CMAKE_VERBOSE_MAKEFILE на ON для наблюдения большего количества журналов. Или посмотрите, можно ли выполнить сборку CMake из командной строки в этом контейнер LXD без QtCreator (затем, можно играть с отдельным компилятором и командами компоновщика).

2
ответ дан 28 September 2019 в 12:59

Другие вопросы по тегам:

Похожие вопросы: