这看起来非常基本,但出于某种原因,我无法在下面的超简单QML应用程序中使用图像源.
仅供参考,我正在运行基于Qt 5.3.2的Mac OS-X 10.9.5,Qt Creator 3.2.1.
import QtQuick 2.3
import QtQuick.Controls 1.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Test")
Image {
id: image1
x: 10
y: 10
width: 100
height: 100
source: "testImage.png"
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
qrc:/main.qml:10:5: QML Image: Cannot open: qrc:/testImage.png
Run Code Online (Sandbox Code Playgroud)
已创建应用程序窗口但未显示任何图像.我也试过在Rectangle中包装图像,但这没有用.
我在这做错了什么?
"testImage.png"位于项目目录中,我尝试了各种方法来使用资源指定图像路径,绝对,相对,甚至使用QML UI设计器手动指定图像源.
我还要提到为了让Qt 5.3.2工作,我遵循了HERE建议的修改.
谢谢.
我在带有OS-X 10.8.5的Mac上运行Qt 5.1.1和QtCreator 2.8.1.我有一个管理ImageData对象的QAbstractListModel.我可以在main.cpp中注册ImageProvider后使用GridView加载图像并在QML中正确显示它们.
接下来,我在视图中选择单个图像,例如,下面显示了几个选定的图像,并带有橙色边框:
然后是C++模型函数:deleteSelected(),产生预期的结果:
但是,当我试图调整窗口大小时,通过抓住其中一个角落,我会崩溃.堆栈跟踪说:异常类型:EXC_CRASH(SIGABRT),我得到Qt错误:
ASSERT failure in QList<T>::at: "index out of range", … QtCore/qlist.h, line 452
The program has unexpectedly finished.
Run Code Online (Sandbox Code Playgroud)
所以也许我不正确地删除了模型项目或未能通知模型的变化,但我认为开始和结束RemoveRows发出了正确的信号来处理同步?毫无疑问,我遗漏了其他一些事情.
我还调用了begin和end ResetModel,它可以防止应用程序在调整大小后崩溃,但在这种情况下,附加到模型的任何其他视图都会恢复显示所有原始项目.
我已经搜索了一个解决方案,尝试了大量的代码实验,并研究了这里,这里,这里以及其他几个地方发布的代码.
似乎无法让这个工作正常,任何建议?谢谢!
...
// Other Classes:
#include "datamodelcontroller.h"
#include "imageprovider.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
// Initialize and register model:
DataModelController model;
QQmlContext *context = engine.rootContext();
context->setContextProperty("DataModelFromContext", &model);
// Register image provider for each "role" to the model:
ImageProvider …
Run Code Online (Sandbox Code Playgroud) 我一直在寻找这个简单问题的答案,没有运气.所以这里是:是否可以在不使用点符号的情况下访问Objective-C中的Object的结构值,即仅使用规范的消息语法?例如,假设我们有一个为粒子对象定义的CGPoint实例变量position!
//Particle.h
@interface Particle : NSObject {
CGPoint position
}
@property CGPoint position;
@end
Run Code Online (Sandbox Code Playgroud)
和相应的实现:
//Particle.m
#import "Particle.h"
@implementation Particle
@synthesize position;
@end
Run Code Online (Sandbox Code Playgroud)
并假设在其他*.m文件(比如AppController.m)中我们有:
a_particle = [Particle alloc];
[a_particle setPosition:CGPointMake(x_val,y_val)];
Run Code Online (Sandbox Code Playgroud)
那为什么我们不能使用:
[[a_particle position] x];
Run Code Online (Sandbox Code Playgroud)
得到x_val而不是:
a_paticle.position.x;
Run Code Online (Sandbox Code Playgroud)
注意到后者工作正常?另请注意
[a_particle position].x;
Run Code Online (Sandbox Code Playgroud)
会工作,但我试图用点符号避免混乱.我的预感是结构实例变量必须使用点表示法来访问它的值(在这种情况下是x_val和y_val),这是真的吗?
我对nVIDIA CUDA有一些经验,现在我也在考虑学习openCL.我希望能够在任何GPU上运行我的程序.我的问题是:每个GPU都使用与nVIDIA相同的架构(多处理器,SIMT结构,全局内存,本地内存,寄存器,现金......)?
非常感谢你!