我有一个包含多个QML文件的项目.所有这些都在资源文件中.现在我想从本地文件系统加载外部图像.但我找不到办法做到这一点.
Image {
source: "images/image.png" // that tries to load file as 'qrc:/images/image.png'
source: "file://images/image.png" // that does not work (file not found)
}
Run Code Online (Sandbox Code Playgroud)
所以现在我有点困惑,我怎么能以正确的方式加载文件?
在我的QML游戏中,我有一些水面,上面有波浪。我需要一个如何使海浪动起来的想法。当波浪起伏时,我只需要一些简单的动画即可。我曾尝试SVG使用Image和制作动画AnimatedImage。没用。GIF由于颜色限制,外观不太好。可能是一些图形效果或精灵?任何想法将不胜感激!
在我的应用程序中,我使用json对象从远程数据库获取结果。通常响应字符串如下所示:
{
status:"ok",
data: [
{ field1:"value1", field2:"value2", field3:"value3" },
{ field1:"value4", field2:"value5", field3:"value6" },
{ field1:"value7", field2:"value8", field3:"value9" }
]
}
Run Code Online (Sandbox Code Playgroud)
它看起来不错,我可以通过以下方式从指定的行/列中获取值:
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject responseObject = jsonResponse.object();
if(responseObject.value("status").toString() == "ok") {
QJsonArray dataObject = responseObject.value("data").toArray();
// and here I can get the value, for example 2-nd row, field2
QString value = dataObject.at(1).toObject().value("field2").toString();
}
Run Code Online (Sandbox Code Playgroud)
但有时我需要不按名称而是按索引获取值。好的,我执行以下操作:
QJsonObject obj = dataObject.at(1).toObject();
QString key = obj.keys().at(1); // I use index here instead of name
QString value = obj.value(key).toString(); …Run Code Online (Sandbox Code Playgroud) 在玩 QML 时,我注意到一个奇怪的行为。假设我有简单的 QML 代码:
Rectangle {
anchors.centerIn: parent
width:200
height:100
color:"yellow"
border.color: "green"
border.width: 10
rotation: 190
}
Run Code Online (Sandbox Code Playgroud)
结果:

图像看起来很差,尤其是边框。但是如果我添加radius: 1我会得到一个非常不同的图片:

现在看起来好多了。边框看起来也更平滑。顺便说一句,设置smooth属性什么都不做。看起来设置会radius开启一些内部平滑。所以我的问题 - 如何在smooth没有设置的情况下设置它radius?
我在 Debian 7 上使用 Qt 5.4
我想在我的应用程序中使用移动语义,而不是复制数据。\n以下是代码:
\n\nusing namespace std;\n\nstruct TestData\n{\n TestData(const TestData&) = delete;\n TestData& operator=(const TestData&) = delete;\n TestData(TestData &&other) = default;\n TestData& operator=(TestData &&other) = default;\n\n TestData() { std::cout << "TestData()" << std::endl; }\n ~TestData() noexcept {\n if(ptr != null) delete []ptr;\n std::cout << "~TestData(), ptr = " << (ptr == nullptr ? "nullptr" : "not null") << std::endl; \n }\n int x;\n char *ptr = nullptr;\n};\n\nvoid add(std::vector<TestData> &vector)\n{\n TestData d;\n d.x = 1;\n d.ptr = new char[12];\n memcpy(d.ptr, "Test string", 11);\n …Run Code Online (Sandbox Code Playgroud) 当我根据某些条件获得指向成员函数的指针然后调用该函数时,我有以下类。
class Test
{
public:
bool isChar(char ch) { return (ch >= 'a' && ch <= 'z'); }
bool isNumeric(char ch) { return (ch >= '0' && ch <= '0'); }
enum class TestType
{
Undefined,
Char,
Numeric,
AnotherOne,
};
bool TestFor(TestType type, char ch)
{
typedef bool (Test::*fptr)(char);
fptr f = nullptr;
switch(type)
{
case TestType::Char:
f = &Test::isChar;
break;
case TestType::Numeric:
f = &Test::isNumeric;
break;
default: break;
}
if(f != nullptr)
{
return (this->*f)(ch);
}
return false;
} …Run Code Online (Sandbox Code Playgroud) 假设我有以下代码:
enum class Type
{
Type32,
Type64
};
template<Type T>
class MyClass
{
public:
using MyType = typename std::conditional<T == Type::Type32, uint32_t, uint64_t>::type;
MyType getSum()
{
MyType sum = 0;
for(size_t i = 0;i < sizeof(arr);i ++)
{
sum += arr[i];
}
return sum;
}
private:
//MyType arr[4] = { 0x1234, 0x5678, 0x9ABC, 0xDEF0 }; // for Type::Type32
//MyType arr[2] = { 0x12345678, 0x9ABCDE }; // for Type::Type64
};
Run Code Online (Sandbox Code Playgroud)
我尝试根据具有相同名称但不同类型和值的模板类型来初始化类变量。我怎样才能做到这一点?我可能正在寻找一个适用于 c++11 的解决方案。
Variant我想用 C++创建某种类型。其实我想尽可能少地使用模板。这个想法是将值union与变量的类型一起存储,并根据存储的类型返回值。
所以测试代码如下所示:
#include <iostream>
#include <vector>
#include <cstring>
#include <typeinfo>
#include <typeindex>
using namespace std;
constexpr uint64_t mix(char m, uint64_t s)
{
return ((s << 7) + ~(s >> 3)) + static_cast<uint64_t>(~m);
}
constexpr uint64_t _(const char* str)
{
return (*str) ? mix(*str,_(str + 1)) : 0;
}
class Variant
{
public:
template<typename T>
Variant(T value):
m_info(typeid(value))
{
std::memcpy(&m_val, &value, sizeof(T));
}
auto toValue() ->decltype(???) // what have I use here ???
{
switch(_(m_info.name()))
{
case …Run Code Online (Sandbox Code Playgroud) 我有和界面如下所示:
public delegate void ScriptFinished();
public interface IScript
{
event ScriptFinished ScriptFinishedEvent;
}
Run Code Online (Sandbox Code Playgroud)
现在我想实现如下所示的界面:
public class Script : IScript
{
event ScriptFinished ScriptFinishedEvent;
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
'Script.ScriptFinishedEvent'无法实现接口成员,因为它不是公共的.
好的,我添加public到活动中:
public interface IScript
{
public event ScriptFinished ScriptFinishedEvent;
}
Run Code Online (Sandbox Code Playgroud)
但错误是:
修饰符'public'对此项无效
我在这里做错了什么,如何实现与事件的接口?