A execução da construção de aplicativo QML / C ++ com o CMake não pode ser executada a partir do pacote QtCreator ou snap

0

Estou tentando obter um aplicativo QML / C ++ compactado como um instantâneo. Eu estou usando o CMake como um sistema de compilação. O aplicativo é construído bem e eu posso executar o executável clicando duas vezes nele. Ao tentar executá-lo a partir do QtCreator (Ubuntu SDK), recebo o seguinte erro:

This application failed to start because it could not find or load the Qt platform plugin "xcb".

Reinstalling the application may fix this problem.
Aborted (core dumped)

O mesmo erro está presente ao tentar executar o aplicativo a partir de um pacote instantâneo.

Ao tentar criar e executar o aplicativo com o QtCreator 4.0.2 (manualmente baixado e instalado) com a mesma versão do Qt (5.5.1 que veio com o Ubuntu 16.04), o aplicativo é executado sem problemas.

CMakeLists.txt

snapcraft.yaml

Todos os testes foram feitos no Ubuntu 16.04 totalmente atualizados com o ubuntu-sdk ppa adicionado.

ATUALIZAÇÃO: Testado em uma VM nova com o Ubuntu 16.04 na esperança de que isso fosse apenas um problema de ambiente e o problema ainda se reproduz

    
por kicsyromy 26.06.2016 / 11:25

1 resposta

1

Parece que você perdeu a libqt5gui5 dos seus pacotes de estágio

ATUALIZAÇÃO:

Então, para expandir minha resposta um pouco mais. Aqui está um exemplo simples de trabalho para capturar um aplicativo CMake / Qt / QML e torná-lo executável a partir do qtcreator

// main.cpp
#include &ltQGuiApplication&gt
#include &ltQQmlApplicationEngine&gt

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/qml/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 {
            title: "Hello world"

            Button {
                anchors.centerIn: parent
                text: "Quit"
                onClicked: Qt.quit()
            }
        }
    }
    Component.onCompleted: show()
}
#CMakeLists.txt
project(simpleapp)
cmake_minimum_required(VERSION 2.8)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Core  REQUIRED)
find_package(Qt5Gui   REQUIRED)
find_package(Qt5Qml   REQUIRED)
find_package(Qt5Quick REQUIRED)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

FILE(GLOB_RECURSE QML_FILES "${CMAKE_SOURCE_DIR}/*.qml")
add_custom_target(qml_files SOURCES ${QML_FILES})

set(CPP_FILES ${CMAKE_SOURCE_DIR}/main.cpp)

add_executable(${PROJECT_NAME} ${CPP_FILES} ${CMAKE_SOURCE_DIR}/qml.qrc)
qt5_use_modules(${PROJECT_NAME} Core Gui Qml Quick)

install(TARGETS ${PROJECT_NAME} DESTINATION /bin)
#snapcraft.yml
name: simpleapp
version: 1.0
summary: Qt Application Example
description: A simple app
confinement: devmode

apps:
  simpleapp:
    command: qt5-launch simpleapp
    plugs:
      - unity7
      - home

parts:
  application:
    plugin: cmake
    source: .
    build-packages:
      - qtbase5-dev
      - qtdeclarative5-dev
    stage-packages:
      - libqt5gui5
      - libgtk2.0-0
      - ubuntu-sdk-libs # probably overkill but fine for this example
    after: [qt5conf] # use the qt5-launch wiki part to setup env

Para criar o snap e executá-lo:

$ snapcraft snap
$ sudo snap install simpleapp_1.0_amd64.snap
$ simpleapp

E apenas use a configuração padrão de execução no qtcreator.

    
por Daniel Chapman 26.06.2016 / 12:55