我搜索了如何着色图像(格式为svg或png ...).
我尝试使用填充图像的矩形覆盖我的图像,但由于我的图像不是矩形,因此它将整个矩形着色而不仅仅是图像.
是否可以用qml更改图像颜色?或者,是否可以使用QPixmap更改qt(使用C++)上的颜色,然后将QPixmap集成到QML项目上?
谢谢您的帮助.(如果没有解决方案,我将不得不将不同的图像加载到具有不同颜色的相同基本图像.)
在.pro文件中,如果您包含头文件(使用HEADERS),C++文件(使用SOURCES)和Objective-C/Objective-C++文件(使用OBJECTIVE_SOURCES),事情就会很简单,但我不太清楚其他文件类型应该如何包括在内.
例如在看Qt所提供的各种例子,是关于QML文件是否应进行不一致DISTFILES,OTHER_FILES或.qrc文件(即在包含RESOURCES).我把QML文件放在一个qml.qrc文件中了.
我的问题出现了,因为我在.qrc文件中包含数据文件,例如音频.wav文件(也如Qt示例中所示;例如Qt快速演示 - 麻烦中的麻烦),但这已经减慢了编译速度.对于Windows上的MinGW,当它达到1GB时,它只会因内存不足而崩溃.必须有更好的方法来包含这些!
你能提供一个关于何时使用的指南:
DISTFILESOTHER_FILESRESOURCES我的应用程序使用c ++和QML.
我在C++部分定义了几个对象来访问SQL等.
看起来像:
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject(QObject *parent = 0);
Q_INVOKABLE void someFunction(const QString &query);
};
qmlRegisterType<MyObject>("xxx.xxx", 1, 0, "MyObject");
Run Code Online (Sandbox Code Playgroud)
理想情况下,我只需要在JML中使用这些对象,而不是在QML中.
我尝试了很多例子并阅读了所有文档,但仍然无法解决我的问题.
所以我的问题:
var obj = Qt.createComponent("MyObject");但看起来不行.是否有可能以正常的JS风格定义新对象 - var obj = new MyObject;?TypeError: Property 'someFunction' of object QQmlComponent(0x3605f5c0) is not a function.我在这里做错了什么?我的对象派生自QObject,而不是来自QQmlComponent.使用旧式循环,我可以深入研究 aQJsonArray并在下面的示例中为每个数组项添加元素“foo”和现有元素“bar”的内容。我如何使用基于 C++11 的范围来做到这一点?
// QJsonArray oldArray contains an array of which one element is "bar"
QJsonArray newArray;
int i, b = oldArray.count();
for (i=0; i<n; ++i) {
QJsonObject element = oldArray.at(i).toObject();
element["foo"] = element["bar"];
newArray.append(element);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法(无可否认是反复试验):
for (auto& element : oldArray) {
element["foo"] = element["bar];
newArray.append(element);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误
对类型“QJsonValueRef”的非常量左值引用无法绑定到“QJsonValueRef”类型的临时变量
for (const auto& element : oldArray) {
...
Run Code Online (Sandbox Code Playgroud)
我收到警告
循环变量“元素”始终是副本,因为“QJsonArray”类型的范围不返回引用
for (const auto element : oldArray) {
element["foo"] = element["bar];
...
Run Code Online (Sandbox Code Playgroud)
我收到错误
'const QJsonValueRef' …
如果有一个interface,说...
public interface ITool
{
void Use();
}
Run Code Online (Sandbox Code Playgroud)
我有一个MonoBehaviour实现该接口的类,比如说......
public class Equipment : MonoBehaviour, ITool
{
...
public void Use()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想引用另一个类中的接口MonoBehaviour,比如说......
public class Player : MonoBehaviour
{
public ITool tool;
...
void Update()
{
...
tool.Use();
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我发现 Unity 中的检查器Player没有显示tool,因此我无法从具有组件的某个对象中拖动引用ITool。
通过搜索,我看到有人说 Unity 检查器不支持接口,并且人们已经找到了避免接口的方法。
有什么办法?
如果不为每个接口创建自定义包装器类(例如这个接口),我如何保留接口类的优点并保持脚本解耦?(即我不想输入public Equipment tool,Player因为Player不必了解Equipment脚本......并且还应该让我引用不同类型的ITool。)
假设我有一个ListView可点击的委托组件(或GridView或Repeater).这些委托组件需要在触发时发出信号以及自定义数据,这些信息可以由父项获取ListView.如何实现这种信号绑定?
例如,以下代码是我的尝试,但我不知道如何将trigger委托组件的componentTriggered信号绑定到root项目中的信号?
Item {
id: root
anchors.fill: parent
signal componentTriggered(string name)
onComponentTriggered: {
console.log(name + ' component was triggered')
}
ListModel {
id: myModel
ListElement { name: "alpha" }
ListElement { name: "beta" }
ListElement { name: "gamma" }
ListElement { name: "delta" }
}
ListView {
id: myListView
width: 100
height: 600
model: myModel
delegate: TheDelegate { name: model.name }
}
}
Run Code Online (Sandbox Code Playgroud)
访问 TheDelegate.qml
import …Run Code Online (Sandbox Code Playgroud) Qt可以通过多种方式使用OpenGL:桌面(本机),ANGLE,ES ......现在可以在运行时选择"动态".在应用程序中,有没有办法可以检测到哪一个正在使用?在C++内还是在QML中?
例如,等同于允许您检测OS 的全局声明的东西
A MultiPointTouchArea with mouseEnabled:true and minimumTouchPoints:1 doesn't appear to support mouse movements when the mouse button is not pressed (tested on MacBook Air with mouse and Windows 10 with mouse) nor single point touch events (tested on a Macbook Air trackpad).
import QtQuick 2.5
Rectangle {
id: root
width: 800
height: 300
MultiPointTouchArea {
anchors.fill: parent
mouseEnabled: true
minimumTouchPoints: 1
maximumTouchPoints: 10
onUpdated: {
for (var touch in touchPoints)
console.log("Multitouch updated touch", touchPoints[touch].pointId, "at", touchPoints[touch].x, ",", touchPoints[touch].y)
}
}
} …Run Code Online (Sandbox Code Playgroud) 试试这个:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
if (error) {
NSLog(@"Error setting category: %@", [error description]);
}
Run Code Online (Sandbox Code Playgroud)
获取错误"错误设置类别:UIView"但不知道如何解决这个问题.不完全确定它告诉我的是什么.
请帮忙!
编辑
音频播放:
NSURL *audioFileURL = [[NSBundle mainBundle] URLForResource:@"DemoSong" withExtension:@"m4a"];
NSError *error;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:&error];
if (error) {
NSLog(@"%@", [error localizedDescription]);
}
[_audioPlayer setNumberOfLoops:-1];
[_audioPlayer setMeteringEnabled:YES];
[_visualizer setAudioPlayer:_audioPlayer];
[_audioPlayer prepareToPlay];
[_audioPlayer play];
NSLog(@"play audio");
Run Code Online (Sandbox Code Playgroud) 我不想禁用 QML 的所有警告(如本问题所述)。相反,我想禁用特定类型的警告。就我而言,TypeError: Cannot read property of null警告。
请注意,我认为,我收到此警告是由于Qt 错误在销毁过程中影响孙子元素,而不是任何代码错误的结果。GridView就我而言,每次更改特定模型时,我都会收到很多此类警告(10 到 100 秒) ,因此这些消息在控制台日志中占据主导地位。
如何QJsonArray根据其子项之一实现自定义排序?
我QJsonArray toys基于这个 JSON:
"toys": [
{
"type": "teddy",
"name": "Thomas",
"size": 24
},
{
"type": "giraffe",
"name": "Jenny",
"size": 28
},
{
"type": "alligator",
"name": "Alex",
"size": 12
}
]
Run Code Online (Sandbox Code Playgroud)
我想按字母顺序排序"name"。
我试过这个:
std::sort(toys.begin(), toys.end(), [](const QJsonObject &v1, const QJsonObject &v2) {
return v1["name"].toString() < v2["name"].toString();
});
Run Code Online (Sandbox Code Playgroud)
但这会引发很多错误。
为什么这么放
Renderer? myRenderer;
Run Code Online (Sandbox Code Playgroud)
产生错误
The type 'Renderer' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'Nullable<T>'
Run Code Online (Sandbox Code Playgroud)
然而
Vector3? myVector3;
Run Code Online (Sandbox Code Playgroud)
才不是?
举例来说,我希望能够写
void ApplyMaterial(Material material)
{
Renderer? renderer = targetDefinedExternally;
renderer?.material = material;
}
Run Code Online (Sandbox Code Playgroud)
相比之下,以下不会产生错误
Vector3? vector;
float? magnitude = vector3?.magnitude;
vector3?.Normalize();
Run Code Online (Sandbox Code Playgroud)
这表明某些 Unity 类型可以为空,而其他类型则不能。我怎么知道哪个是哪个?(有没有一种优雅的方法来解决这个问题?)