QQuickWindow в общей библиотеке автоматически закрывается при отображении в QApplicationC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 QQuickWindow в общей библиотеке автоматически закрывается при отображении в QApplication

Сообщение Anonymous »

Я разрабатываю общую библиотеку интерфейса с помощью qt. У меня возникли проблемы с эффектом нажатия на кнопку QPushbutton, когда я нажимаю на сенсорный экран (этот эффект появляется один раз при 10 щелчках).

Поэтому я создаю базовое приложение qml с одним Кнопка и нажатый эффект появляются постоянно. Я включаю часть qml в свою библиотеку и загружаю ее в QQuickWidget, и у меня та же проблема с эффектом нажатия.

Поэтому я хочу использовать только qml. Мое основное приложение — это QApplication, и я загружаю в него свою библиотеку, в которую загружаю файл qml с помощью QQmlApplication Engine. Затем я показываю его с помощью QQuickWindow.

Когда я запускаю свое приложение, я вижу, что окно открыто, но оно автоматически закрывается. Я думаю, что мое QApplication не обнаруживает QML, и цикл рендеринга не запускается.

Я использую Windows с QT5.5.1 (MSVC2013, 32-битная версия)

Pro-файл основного приложения

Код: Выделить всё

QT += core xml widgets qml quick

TARGET = COM_INT
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
comint.cpp
HEADERS += \
comint.h \

INCLUDEPATH += "$$(My_Workspace)/Modules_Generique/IHM_Soft"
Release{
LIBS += "$$(My_Workspace_build)/IHM_Soft/release/IHM_Soft.lib"
}

Debug{
LIBS += "$$(My_Workspace_build)/IHM_Soft/debug/IHM_Soft.lib"
}
Основное приложение (exe) main.cpp

Код: Выделить всё

#include 
#include 

#include "comint.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

ComInt com;
com.initialize();

return a.exec();
}
Класс ComInt:
Исходный файл comint.cpp

Код: Выделить всё

#include "comint.h"
#include "ihmsoft.h"

ComInt::ComInt()
{
}

void ComInt::initialize()
{
this->m_pIHMSoft = new IHMSoft();
}
заголовочный файл comint.h

Код: Выделить всё

#ifndef COMINT_H
#define COMINT_H

class IHMSoft;

class ComInt
{
public:
ComInt();
void initialize();
private:
IHMSoft *m_pIHMSoft;
};

#endif // COMINT_H
pro-файл общей библиотеки

Код: Выделить всё

QT       += xml widgets core qml quick quickwidgets
CONFIG  += c++11

TARGET = IHM_Soft
TEMPLATE = lib

DEFINES += IHM_SOFT_LIBRARY

SOURCES +=  ihmsoft.cpp
HEADERS +=  ihmsoft.h\
ihm_soft_global.h

RESOURCES += \
rsc.qrc
Общая библиотека: исходный файл ihm_soft.cpp

Код: Выделить всё

#include "ihmsoft.h"
#include 
#include 

IHMSoft::IHMSoft(){

qputenv("QT_QUICK_CONTROLS_STYLE", "Base");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/IHM_Soft.qml")));
QList root = engine.rootObjects();
QQuickWindow *window = qobject_cast(root.at(0));
window->show();
}
заголовочный файл ihm_soft.h

Код: Выделить всё

#ifndef IHM_SOFT_H
#define IHM_SOFT_H

#include "ihm_soft_global.h"

class IHM_SOFT_SHARED_EXPORT IHM_Soft
{

public:
IHM_Soft();
};

#endif // IHM_SOFT_H
Глобальный файл ihm_soft_global.h

Код: Выделить всё

#ifndef IHM_SOFT_GLOBAL_H
#define IHM_SOFT_GLOBAL_H

#include 

#if defined(IHM_SOFT_LIBRARY)
#  define IHM_SOFT_SHARED_EXPORT Q_DECL_EXPORT
#else
#  define IHM_SOFT_SHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // IHM_SOFT_GLOBAL_H
Файл Qml

Код: Выделить всё

import QtQuick 2.0
import QtQuick.Controls 1.4

import QtQuick.Window 2.0

ApplicationWindow {
visible: true
width: 500
height: 500

Button {
visible: true
iconSource: "resources/t_on_off.png"
}
}
Изменить: извините, код основного приложения был тестовым приложением, которое не включало lib.

Подробнее здесь: https://stackoverflow.com/questions/558 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»