我正在将一个简单的桌面应用程序迁移到 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 视图中,图像框架位于正确的位置,但它不显示图像本身。
如果我将图像源属性更改为:
source: "baloon.png"
,图像将出现在设计模式中,但不再出现在可执行文件中。
我尝试在 cmakelist 文件的 qt_add_resources 下添加图像,而不是使用 .qrc 文件,但行为是相同的。
有人可以解决我的问题吗?
请在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
}
}