有没有办法检查任意变量类型是否可迭代?
那么要检查它是否有索引元素,或者我可以实际循环它的孩子?(例如使用foreach?)
是否可以为此创建通用模板?
我在搜索时找到了其他编程语言的技巧.然而,仍然必须找到如何在C++中做到这一点.
我已经设置了一些我自己的类,这些类是从字典中继承的,就像它们一样.然而,当我想将它们编码为JSON(使用Python)时,我希望它们能够以一种我可以将它们解码回原始对象而不是dict的方式进行序列化.
所以我想支持我自己的类的嵌套对象(从dict继承).
我尝过这样的东西:
class ShadingInfoEncoder(json.JSONEncoder):
def encode(self, o):
if type(o).__name__ == "NodeInfo":
return '{"_NodeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif type(o).__name__ == "ShapeInfo":
return '{"_ShapeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif type(o).__name__ == "ShaderInfo":
return '{"_ShaderInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
return super(ShadingInfoEncoder, self).encode(o)
Run Code Online (Sandbox Code Playgroud)
和:
class ShadingInfoEncoder(json.JSONEncoder):
def encode(self, o):
if isinstance(o, NodeInfo):
return '{"_NodeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif isinstance(o, ShapeInfo):
return '{"_ShapeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif isinstance(o, ShaderInfo): …Run Code Online (Sandbox Code Playgroud) 我有一个用'float2,unsigned int'对模板化的向量,如:
std::vector<std::pair<float2, unsigned int>> myVec;
Run Code Online (Sandbox Code Playgroud)
然后我试图在向量中添加这样一对:
unsigned int j = 0;
float2 ab = {1.0, 2.0};
myVec.push_back(std::make_pair(ab, j));
Run Code Online (Sandbox Code Playgroud)
这是我期望它应该工作的方式,虽然当我尝试编译它时我得到错误:
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2536: 'std::_Pair_base<_Ty1,_Ty2>::std::_Pair_base<_Ty1,_Ty2>::first' : cannot specify explicit initializer for arrays
1> with
1> [
1> _Ty1=float2 ,
1> _Ty2=unsigned int
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(166) : see declaration of 'std::_Pair_base<_Ty1,_Ty2>::first'
1> with
1> [
1> _Ty1=float2 ,
1> _Ty2=unsigned int
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(247) : …Run Code Online (Sandbox Code Playgroud) 我正在尝试更改 QMenu 上标签/文本的样式和/或字体,而不影响它的子项。我使用 PySide 在 Python 中执行此操作(其工作方式与 Qt 类似)。
我试过了:
menu = QtGui.QMenu()
f = menu.font()
f.setBold(True)
menu.setFont(f)
Run Code Online (Sandbox Code Playgroud)
和
menu = QtGui.QMenu()
menu.setStyleSheet("QMenu{font-weight: bold;}")
Run Code Online (Sandbox Code Playgroud)
这两者都不会更改菜单本身的标签,但会对其所有子项执行此操作。
我更愿意直接在 QMenu (或另一个类,如果它的行为类似并且使其成为可能)上设置样式,而不是在其父级上应用样式表。
目标
我的想法是,我有一个带有各种子菜单的菜单(这些子菜单在某种程度上是基于服务器上的文件夹的动态),其中一些需要是粗体,一些是斜体。因此,我想动态添加这些子 QMenu 并相应地设置它们的样式。