将C++类端口连接到PyQt

Port C++ class to PyQt

本文关键字:连接 PyQt C++      更新时间:2023-10-16

我正在尝试将用C++编写的Qt4自定义小部件转换为Python 2.7自定义小部件。然而,我一直无法弄清楚QLabel(parent)将如何用Python编写。这是来自".ccp"文件的原始C++代码:

DocumentWidget::DocumentWidget(QWidget *parent)
    : QLabel(parent)
{
    currentPage = -1;
    setAlignment(Qt::AlignCenter);
}

QLabel(parent)似乎是某种初始化器列表。我曾尝试在Python中并行使用多重继承,但这导致了以下错误:Cannot create a consistent method resolution order (MRO) for bases QLabel, QWidget

我正在尝试移植代码,而不是为C++小部件创建包装器,因为我不了解C++,并且认为我将来必须进一步自定义小部件。

我没有受过程序员的培训,这是我第一天接触C++,所以即使我在做一些愚蠢的事情,也可以随时纠正我。我不会感到尴尬。

代码为DocumentWidget类定义了一个构造函数,该类继承了QLabel并需要一个QWidget作为父级。

等效的PyQt代码是:

from PyQt4 import QtCore, QtGui
class DocumentWidget(QtGui.QLabel):
    def __init__(self, parent):
        super(DocumentWidget, self).__init__(parent)
        # or QtGui.QLabel.__init__(self, parent)
        self.currentPage = -1
        self.setAlignment(QtCore.Qt.AlignCenter)

多重继承有效,但基类必须按正确的顺序调用(即DocumentWidget(QLabel, QWidget)而不是DocumentWidget(QLabel, QWidget)(。

完整:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
class DocumentWidget(QLabel, QWidget):
    def __init__(self, parent=None):
        super(DocumentWidget, self).__init__()
        self.currentPage = -1
        self.setAlignment(Qt.AlignCenter)