【问题标题】:Translation from C++ to Python for pyqtpyqt 从 C++ 到 Python 的翻译
【发布时间】:2018-09-16 19:01:54
【问题描述】:

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

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

【问题讨论】:

  • newrow = []age = pyt.value(0)newcolumn = QStandardItem(age)newrow.append(newcolumn)height = pyt.value(1)newcolumn = QStandardItem(height)

标签: python c++ pyqt


【解决方案1】:

我不知道有这样的文档,但我想你主要了解的是C++是静态类型的,所以变量必须在使用前声明,格式如下:

类型 变量名;

如果您在类型中看到*&amp;,则分别是指针或引用,因此请忽略它。这些形式:

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++有指针和值的区别,所以你通常可以在变量的使用中忽略*&amp;,例如C++ 中的 function(*variable)function(&amp;variable) 在 Python 中可能只是 function(variable)

此示例中的最后一个问题是当您在类型中包含 &lt;&gt; 时。这些是 C++ 模板,在 Python 中没有直接的等价物。相反,它们要么为整个类型提供一个固定的名称,要么让您使用替代的 Python 类型。在此示例中,它们看起来像是接受 Python list 对象,而不是具有 QList&lt;QStandardItem*&gt; 的特殊名称。不要被示例中 NewRow 的非常规命名所迷惑,这是变量名而不是类型。

不幸的是,QT 在本机代码中使用了很多预处理器宏,按照惯例,这些宏都是用大写字母编写的,例如 Q_OBJECTSIGNALSLOT 等。没有翻译这些的通用规则,但是很多都可以忽略。

【讨论】:

  • 非常感谢 Jake,这正是我需要帮助我通过有时困难的 Qt C++“方言”
猜你喜欢
  • 2019-10-07
  • 2012-05-29
  • 1970-01-01
  • 2022-10-17
  • 2021-04-20
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多