可执行应用程序上的 QT6 Qml 图像或设计模式的 2D 视图,但不是两者

问题描述 投票:0回答:1

我正在将一个简单的桌面应用程序迁移到 QT5 qmake 到 QT 6.5 cmake。我在 QT Creator 的可执行应用程序和设计模式 2D 视图上显示图像时遇到问题。

我退后一步,创建了一个尽可能简单的应用程序,窗口中间只有一张图片。我向应用程序添加了一个新的 .qrc 资源文件,并将其添加到 qt_add_executable 到 cmakelist 文件中。将我的图像添加到资源中并按如下方式编辑 Main.qml:

Cmakelist.txt

cmake_minimum_required(VERSION 3.16)

project(demoimage VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

find_package(Qt6 6.4 REQUIRED COMPONENTS Quick)

qt_standard_project_setup()

qt_add_executable(appdemoimage
    main.cpp
    Images.qrc
)

qt_add_qml_module(appdemoimage
    URI demoimage
    VERSION 1.0
    QML_FILES Main.qml
)

set_target_properties(appdemoimage PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

target_link_libraries(appdemoimage
    PRIVATE Qt6::Quick
)

install(TARGETS appdemoimage
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

Main.qml

import QtQuick
import QtQuick.Window

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
    
    Image{
        id: baloon
        anchors.fill: parent
        source: "qrc:/baloon.png"
        anchors.leftMargin: 80
        anchors.topMargin: 80
        anchors.rightMargin: 80
        anchors.bottomMargin: 80
    }
}

Images.qrc

<RCC>
    <qresource prefix="/">
        <file>baloon.png</file>
    </qresource>
</RCC>

可执行文件按预期显示图像。在 QT Creator 设计模式的 2D 视图中,图像框架位于正确的位置,但它不显示图像本身。

QT creator 2D View Design mode

如果我将图像源属性更改为:

source: "baloon.png"
,图像将出现在设计模式中,但不再出现在可执行文件中。

我尝试在 cmakelist 文件的 qt_add_resources 下添加图像,而不是使用 .qrc 文件,但行为是相同的。

有人可以解决我的问题吗?

c++ image qt qml qt6
1个回答
0
投票

请在cmake文件中使用以下代码:

set(CMAKE_AUTORCC ON)

制作:

cmake_minimum_required(VERSION 3.16)

project(TestProjectSF VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTORCC ON)
find_package(Qt6 6.4 REQUIRED COMPONENTS Quick)

qt_standard_project_setup()

qt_add_executable(appTestProjectSF
    main.cpp

    image.qrc
)

qt_add_qml_module(appTestProjectSF
    URI TestProjectSF
    VERSION 1.0
    QML_FILES Main.qml

#    baloon.png
)

set_target_properties(appTestProjectSF PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

target_link_libraries(appTestProjectSF
    PRIVATE Qt6::Quick
)

install(TARGETS appTestProjectSF
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

main.qml:

import QtQuick
import QtQuick.Window

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")


    Image{
        id: baloon

        cache: true
        anchors.fill: parent
        source: "qrc:/baloon.png"
        anchors.margins: 80
    }
}

结果:

© www.soinside.com 2019 - 2024. All rights reserved.