小编Pau*_*one的帖子

QML改变图像颜色

我搜索了如何着色图像(格式为svg或png ...).

我尝试使用填充图像的矩形覆盖我的图像,但由于我的图像不是矩形,因此它将整个矩形着色而不仅仅是图像.

是否可以用qml更改图像颜色?或者,是否可以使用QPixmap更改qt(使用C++)上的颜色,然后将QPixmap集成到QML项目上?

谢谢您的帮助.(如果没有解决方案,我将不得不将不同的图像加载到具有不同颜色的相同基本图像.)

qt svg image colors qml

17
推荐指数
3
解决办法
1万
查看次数

在Qt中,何时应该使用RESOURCES与DISTFILES和OTHER_FILES

在.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时,它只会因内存不足而崩溃.必须有更好的方法来包含这些!

你能提供一个关于何时使用的指南:

  • DISTFILES
  • OTHER_FILES
  • RESOURCES

qt

12
推荐指数
2
解决办法
6710
查看次数

如何在QML Javascript中创建和使用C++对象

我的应用程序使用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中.

我尝试了很多例子并阅读了所有文档,但仍然无法解决我的问题.

所以我的问题:

  • 如何在Javascript中实例化C++中定义的对象?我试过var obj = Qt.createComponent("MyObject");但看起来不行.是否有可能以正常的JS风格定义新对象 - var obj = new MyObject;
  • 如何在javascript中访问此创建的对象?我试过obj.someFunction("xxx")但是有一些错误 - TypeError: Property 'someFunction' of object QQmlComponent(0x3605f5c0) is not a function.我在这里做错了什么?我的对象派生自QObject,而不是来自QQmlComponent.

javascript qml qt-quick qt5 qtquick2

10
推荐指数
1
解决办法
7651
查看次数

如何在 QJsonArray 中使用基于 C++11 的范围

使用旧式循环,我可以深入研究 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' …

qt for-loop c++11

9
推荐指数
1
解决办法
3003
查看次数

如何解决 Unity 不在检查器中显示界面的问题?

如果有一个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 toolPlayer因为Player不必了解Equipment脚本......并且还应该让我引用不同类型的ITool。)

c# unity-game-engine

8
推荐指数
1
解决办法
7036
查看次数

如何在QML中绑定到ListView中的委托组件的信号

假设我有一个ListView可点击的委托组件(或GridViewRepeater).这些委托组件需要在触发时发出信号以及自定义数据,这些信息可以由父项获取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)

listview signals-slots qml

7
推荐指数
1
解决办法
4341
查看次数

问:如何检测正在使用的OpenGL版本?

Qt可以通过多种方式使用OpenGL:桌面(本机),ANGLE,ES ......现在可以在运行时选择"动态".在应用程序中,有没有办法可以检测到哪一个正在使用?在C++内还是在QML中?

例如,等同于允许您检测OS 的全局声明的东西

opengl qt qt5

6
推荐指数
1
解决办法
7124
查看次数

How to track mouse movements / single touch point with a MultiPointTouchArea in QML?

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)

mouse qt multi-touch qml

5
推荐指数
0
解决办法
2161
查看次数

AVAudioSession setCategory错误

试试这个:

[[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)

audio objective-c ios avaudiosession

4
推荐指数
1
解决办法
4494
查看次数

如何禁用特定的 QML 调试器警告

我不想禁用 QML 的所有警告(如本问题所述)。相反,我想禁用特定类型的警告。就我而言,TypeError: Cannot read property of null警告。

请注意,我认为,我收到此警告是由于Qt 错误在销毁过程中影响孙子元素,而不是任何代码错误的结果。GridView就我而言,每次更改特定模型时,我都会收到很多此类警告(10 到 100 秒) ,因此这些消息在控制台日志中占据主导地位。

qt suppress-warnings qml

4
推荐指数
1
解决办法
2093
查看次数

按其子元素之一对 QJsonArray 进行排序

如何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)

但这会引发很多错误。

c++ sorting qt json

2
推荐指数
1
解决办法
819
查看次数

哪些 Unity 类型可以为空?

为什么这么放

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 类型可以为空,而其他类型则不能。我怎么知道哪个是哪个?(有没有一种优雅的方法来解决这个问题?)

c# nullable unity-game-engine

1
推荐指数
1
解决办法
779
查看次数