【发布时间】:2014-02-21 12:00:36
【问题描述】:
Ubuntu 12.04、Qt 4.8、OpenCv 2.4.3、PCL 1.6。全部通过 Qt Creator 2.5.2 开发。全部为 64 位版本。
直到现在我才遇到这个问题,因为我正在通过“cv::imread(filename)”处理磁盘中的图像文件,然后将其数据传输到 QImage -> QPixmap -> QLabel。没问题。
现在,我需要将一些图像加载到 Qt 资源文件中。我通过 Qt Creator 创建了正确的 .qrc,并在其中复制和注册了图像文件。好吧,如果我尝试从资源中加载图像,它就不起作用:
QImage qi = QImage(":images/red.jpg");
if (qi.isNull())
{
QMessageBox::warning(this,"hey","hey");
}
当然,一开始我整天都在为资源名称而苦苦挣扎。直到我决定开始其他项目,并复制粘贴资源文件和加载该 QImage 的代码。在测试项目中,它工作正常。 (相同的计算机,相同的 IDE 和环境,但没有 OpenCV 链接)。 看到这里,我决定试试这段代码:
QString fn = QFileDialog::getOpenFileName(this,"Load image");
qi = QImage(fn);
if (qi.isNull())
{
QMessageBox::warning(this,"hey","hey");
}
在原始代码中,这不起作用! fn 加载了正确的文件名,但是“qi = QImage(fn);”失败。在测试程序中,这按预期工作。
这是一个大问题,因为我想在windows中设置一些图标,以及一些小部件和QSplashScreen的一些图像。将图像文件复制到生成的二进制文件夹并加载它们是不太可接受的,假设用户不会对它们做任何事情......
我必须再次指出,这不是 Qt 资源文件名的问题。
对此有一些解决方法或想法吗?
PD:我试过 QPixmap(":images/red.jpg");但程序执行失败。
PD:一些项目设置:
ResFiles.qrc:
<RCC>
<qresource prefix="/">
<file>images/red.png</file>
</qresource>
</RCC>
QOP.proj 文件:
#-------------------------------------------------
#
# Project created by QtCreator 2013-03-09T23:56:16
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QOP
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
[several files more...]
HEADERS += mainwindow.h \
[several files more...]
FORMS += mainwindow.ui \
camwindow.ui \
dialogsetupcam.ui \
dialogtestcam_sr4k.ui \
dialogtestcam_pmdnano.ui \
dialogcommand_pmdnano.ui \
dialogcreatecam.ui
CONFIG += link_pkgconfig
PKGCONFIG += opencv
CONFIG += link_pkgconfig
PKGCONFIG +=
#Do not use this configuration to get PCL, some sublibraries aren't properly accesible, in example Visualizer
#CONFIG += link_pkgconfig
#PKGCONFIG += pcl_io-1.6
#PCL Headers
INCLUDEPATH += /usr/include/pcl-1.6\
/usr/include/flann/\
/usr/include/eigen3/\
/usr/include/openni/
#PCL Libraries
LIBS += -lpcl_common\
-lpcl_features\
-lpcl_filters\
-lpcl_geometry\
-lpcl_io\
-lpcl_kdtree\
-lpcl_keypoints\
-lpcl_octree\
-lpcl_registration\
-lpcl_sample_consensus\
-lpcl_search\
-lpcl_segmentation\
-lpcl_surface\
-lpcl_tracking\
-lpcl_visualization
#VTK Headers
INCLUDEPATH += /usr/include/vtk-5.8
#VTK Libraries
LIBS += -lQVTK\
-lvtkalglib\
-lvtkCharts\
-lvtkCommon\
-lvtkDICOMParser\
-lvtkexoIIc\
-lvtkFiltering\
-lvtkftgl\
-lvtkGenericFiltering\
-lvtkGeovis\
-lvtkGraphics\
-lvtkHybrid\
-lvtkImaging\
-lvtkInfovis\
-lvtkIO\
-lvtkmetaio\
-lvtkParallel\
-lvtkproj4\
-lvtkQtChart\
-lvtkRendering\
-lvtksys\
-lvtkverdict\
-lvtkViews\
-lvtkVolumeRendering\
-lvtkWidgets
RESOURCES += \
ResFiles.qrc
OTHER_FILES += \
images/red.png
我想到的一种解决方法是使用一些 QFile 类加载这些图像并将其“传输”到 QImage。这个可以吗?
【问题讨论】: