我想编写一个bash脚本,允许我检查是否已经在arch linux中安装了某个软件包.
我怎样才能做到这一点?
我创建了一个qt bugticket希望文档将被扩展.
相信2010年的问题和Qt文档,operator==()
不适用于自定义类型.
引用:
bool QVariant :: operator ==(const QVariant&v)const
将此QVariant与其进行比较
v
,true
如果它们相等则返回; 否则返回false
.
QVariant
使用它包含的type()的相等运算符来检查是否相等.如果它的类型与此变体的类型不同,QVariant
将尝试convert()
v
.查看canConvert()
可能的转换列表.警告:此功能不支持注册的自定义类型
qRegisterMetaType()
.
我试图从2010年的Stackoverflow问题重现repro案例,并且比较对我没有任何问题.
我也更进一步,尝试使用自己的类进行比较,这也很完美.要重现,请将以下代码放入任何标头中:
enum MyEnum { Foo, Bar };
Q_DECLARE_METATYPE(MyEnum)
class MyClass
{
int value;
public:
MyClass() : value(0)
{
}
MyClass(int a) : value(a)
{
}
bool operator==(const MyClass &) const
{
Q_ASSERT(false); …
Run Code Online (Sandbox Code Playgroud) 现在,当阅读 Internet 中的不同资源时,如果您要按顺序处理大型数组,那么数组结构似乎是一种非常高效的数据存储方式。
例如在 C++ 中
struct CoordFrames
{
float* x_pos;
float* y_pos;
float* z_pos;
float* scaleFactor;
float* x_quat;
float* y_quat;
float* z_quat;
float* w_quat;
};
Run Code Online (Sandbox Code Playgroud)
允许比数组更快地处理大数组(感谢 SIMD)
struct CoordFrame
{
glm::vec3 position;
float scaleFactor;
glm::quat quaternion;
};
Run Code Online (Sandbox Code Playgroud)
GPU 是专为大规模并行计算而设计的处理器。SIMD 是这里的“必备”。所以结论是数组结构在这里最有用。
但 ...
我从未在任何地方看到过这样的 GLSL 着色器(这对我来说是错误的):
#define NUM_POINT_LIGHTS 16
uniform float point_light_x[NUM_POINT_LIGHTS];
uniform float point_light_y[NUM_POINT_LIGHTS];
uniform float point_light_z[NUM_POINT_LIGHTS];
uniform float point_light_radius[NUM_POINT_LIGHTS];
uniform float point_light_color_r[NUM_POINT_LIGHTS];
uniform float point_light_color_g[NUM_POINT_LIGHTS];
uniform float point_light_color_b[NUM_POINT_LIGHTS];
uniform float point_light_power[NUM_POINT_LIGHTS];
Run Code Online (Sandbox Code Playgroud)
或类似的东西也不经常看到:
#define NUM_POINT_LIGHTS 16
uniform vec3 point_light_pos[NUM_POINT_LIGHTS]; …
Run Code Online (Sandbox Code Playgroud)使用自己的类型作为属性类型时,当前存在问题。
我的自定义类型是在名称空间中定义的。当我将其放入全局名称空间时,一切都可以正常工作。
是否可以将名称空间中的自定义类型用作属性值?
这是一个最小的示例(我正在使用Qt5.0和g ++ 4.7.3)
这是test.pro
文件:
LANGUAGE = C++
QT += core gui widgets
TARGET = test
QMAKE_CXXFLAGS += -std=c++11
HEADERS += test.h
SOURCES += test.cpp
Run Code Online (Sandbox Code Playgroud)
这是test.h
文件:
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
namespace MyNamespace
{
struct MyValue
{
private:
QString a;
int b;
public:
MyValue(const QString &a="", int b=0)
: a(a), b(b)
{
}
bool operator !=(const MyValue &other) const
{
return (this->a!=other.a) || (this->b!=other.b);
}
friend QDataStream &operator<<(QDataStream &stream, const MyNamespace::MyValue &value);
friend …
Run Code Online (Sandbox Code Playgroud) 当使用带有gdb的glm :: vec3类调试我的C ++程序时,使用这些向量类非常麻烦:
我已经阅读了手册,可以编写调试助手。
我设法让qtcreator加载文件(如果我的python文件语法错误,调试器将立即退出并出现错误)。
如何编写简约的调试助手?
这是C ++代码
#include <glm/glm.hpp>
class Foo
{
};
int main(int, char**)
{
glm::vec3 vec3(42, 64, 256);
Foo foo;
(void)vec3;
(void)foo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的调试助手:
from dumper import *
def qdump__glm__vec3(d, value):
d.put("Yay, vec3 works :)")
def qdump__Foo(d, value):
d.put("Yay, Foo works :)")
Run Code Online (Sandbox Code Playgroud)
vec3代码似乎没有任何可见的效果。对于foo来说,它似乎可以做些什么,但是Yay, Foo works :)
qtcreator只是显示而不是打印<not accessible>
。请参见以下屏幕截图: