pyqt

时间:2018-04-06 17:20:00

标签: python c++ pyqt

在阅读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)

更广泛地说,有一个文件可以解释两种语言之间的各种等价物吗?

1 个答案:

答案 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_OBJECTSIGNALSLOT等。没有翻译这些的一般规则,但许多可以被忽略。