我正在使用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()
,因为textCursor
类中的QTextCursor
方法的结果已分配给c
,但似乎没有textCursor
方法。我也很难理解这里发生的事情: QTextCursor c = this->textCursor();
c.clearSelection();
this->setTextCursor(c);
用语言解释发生的情况将很有用,因为这将有助于术语。关于理解这些特定代码片段的一些资源的建议也将不胜感激。
最佳答案
我的Python和PyQt使用rust ,但这是一个翻译,可能在语法上存在一些小错误:
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()
您对链接到的代码中发生的事情感到困惑的原因有两个:textCursor
是TextItem
的父类的成员函数。调用textCursor()
与调用this->textCursor()
相同,在Python中将其称为self.textCursor()
。this
的显式用法与隐式调用混合在一起。在C++中,在不需要的地方使用this
被认为是不好的形式,并使其看起来像textCursor()
与this->textCursor()
不同。希望通过阅读我提供的Python版本,您会发现没有区别。future 的资源
C++ tag带有指向C++常见问题解答的链接。我建议漫步C++ Super-FAQ。您将学到一些您不希望知道的知识,而您不知道的不清楚的事物将得到澄清。 SO上也有The Definitive C++ Book Guide and List。
对于PyQt开发,Mark Summerfield的Rapid GUI Programming with Python and Qt是工作代码的不错引用。