在阅读Qt文档或在C ++中的Stackoverflow上给出的答案时,我总是努力获得Python等价物,例如:
QList<QStandardItem*> NewRow;
QString age = pyt.value(0).toString();
QStandardItem *newColumn = new QStandardItem(age);
NewRow.append(newColumn);
QString height = pyt.value(1).toString();
newColumn = new QStandardItem(height);
我的翻译是:
QStandardItem(NewRow)
age = pyt.value(0).toString()
#can't understand this line
NewRow.append(NewColumn)
height = pyt.value(1).toString()
newColumn = QStandardItem(height)
更广泛地说,有一个文件可以解释两种语言之间的各种等价物吗?
答案 0 :(得分:2)
我不知道这样的文档,但我认为你要理解的主要是C ++是静态类型的,所以变量必须在它们被使用之前声明,并且它遵循以下形式:
类型 variableName ;
如果您在类型中看到*
或&
,那么它们分别是指针或引用,因此请为此目的忽略它。这些形式:
Type variable("argument");
Type variable = Type("argument");
Type* variable = new Type("argument");
声明并实例化变量。通过调用构造函数来翻译它们:
variable = Type("argument")
以后的使用不会先输入类型,但会将它们翻译成相同的类型。在您的示例中,newColumn
在声明(给定的类型)创建一个对象,在结尾附近创建另一个对象(没有给定类型)。
如果你看到这个:
variable.foo; // non-pointer
variable->foo; // pointer
在Python中只使用点形式:
variable.foo
C ++在指针和值之间存在差异,因此您通常可以忽略变量的 use 中的*
或&
,例如C ++中的function(*variable)
或function(&variable)
可能只是Python中的function(variable)
。
此示例中的最后一个问题是当您在类型中有<>
时。这些是C ++模板,在Python中没有直接的等价物。相反,他们要么为整个类型提供固定名称,要么让您使用替代Python类型。在此示例中,它们看起来像是接受Python list
对象而不是QList<QStandardItem*>
的特殊名称。不要被示例中NewRow
的非常规命名所抛弃,即变量名称而不是类型。
不幸的是,QT在本机代码中使用了很多预处理器宏,这些宏按惯例用全部大写字母编写,如Q_OBJECT
,SIGNAL
,SLOT
等。没有翻译这些的一般规则,但许多可以被忽略。