python-C Qt代码段的等效PyQt代码

我正在使用PyQt,并且了解足够的OOP以适应Python.但是,文档和有用的论坛帖子都在C中.我知道最好的方法可能就是重新学习C.我正在尝试,但是要花很长时间浏览教程并查找所需的信息,主要是因为我对术语的了解不多,无法知道在哪里查找.

在特定的论坛post中,类实现的方法中的一节内容为:

    void SetTextInteraction(bool on, bool selectAll = false)
{
    if(on && textInteractionFlags() == Qt::NoTextInteraction)
    {
        // switch on editor mode:
        setTextInteractionFlags(Qt::TextEditorInteraction);
        // manually do what a mouse click would do else:
        setFocus(Qt::MouseFocusReason); // this gives the item keyboard focus
        setSelected(true); // this ensures that itemChange() gets called when we click out of the item
        if(selectAll) // option to select the whole text (e.g. after creation of the TextItem)
        {
            QTextCursor c = textCursor();
            c.select(QTextCursor::Document);
            setTextCursor(c);
        }
    }
    else if(!on && textInteractionFlags() == Qt::TextEditorInteraction)
    {
        // turn off editor mode:
        setTextInteractionFlags(Qt::NoTextInteraction);
        // deselect text (else it keeps gray shade):
        QTextCursor c = this->textCursor();
        c.clearSelection();
        this->setTextCursor(c);
        clearFocus();
    }
}

我不明白的部分在这里:

QTextCursor c = textCursor();
c.select(QTextCursor::Document);
setTextCursor(c);

此特定部分的等效Python代码是什么?由于某种原因,我认为第一行可能是c = QTextCursor.textCursor(),因为QTextCursor类中的textCursor方法的结果被分配给了c,但似乎没有textCursor方法.我也很难理解这里发生的事情:

 QTextCursor c = this->textCursor();
 c.clearSelection();
 this->setTextCursor(c);

用语言解释发生的情况将很有用,因为这将有助于术语.关于理解这些特定代码片段的一些资源的建议也将不胜感激.

解决方法:

我的Python和PyQt生锈了,但是这里的翻译可能存在语法上的小错误:

def SetTextInteraction(self, on, selectAll):
    if on and self.textInteractionFlags() == Qt.NoTextInteraction:
        self.setTextInteractionFlags(Qt.TextEditorInteraction)
        self.setFocus(Qt.MouseFocusReason)
        self.setSelected(True) 
        if selectAll:
            c = self.textCursor()
            c.select(QTextCursor.Document)
            self.setTextCursor(c)
    elif not on and self.textInteractionFlags() == Qt.TextEditorInteraction:
        self.setTextInteractionFlags(Qt.NoTextInteraction)
        c = self.textCursor()
        c.clearSelection()
        self.setTextCursor(c)
        self.clearFocus()

您对链接到的代码中的内容感到困惑的原因有两个:

> C在编译时处理隐式范围解析; Python需要显式声明.首先检查本地范围(成员函数),然后检查周围的类,然后(我相信)本地翻译单元/本地非成员函数,最后检查命名空间/作用域层次结构,直到找到要引用的函数或变量.

textCursor是TextItem父类的成员函数.调用textCursor()与调用this-> textCursor()相同,在Python中将其称为self.textCursor().
>提供的代码将其显式用法与隐式调用混合在一起.在C中不需要的地方使用此格式被认为是不好的形式,并使其看起来好像textCursor()与this-> textCursor()不同.希望通过阅读我提供的Python版本,您会发现没有区别.

未来资源
C++ tag带有指向C常见问题解答的链接.我建议您在C++ Super-FAQ中漫步.您会学到一些您不希望知道的知识,以及一些不清楚的知识. SO上也有The Definitive C++ Book Guide and List.

对于PyQt开发,Mark Summerfield的Rapid GUI Programming with Python and Qt是工作代码的很好参考.

上一篇:python-PyQtGraph图形布局小部件问题


下一篇:python-在PyQtGraph中反转Y轴