我试图用python重写一些PyQt C ++代码。
我已经多次进行这种类型的语法转换,但是没有像这样的子类示例。此C ++代码旨在允许您将组合框添加到QTableWidget标题中,以类似于Excel标题过滤器。
我可以转换大多数逻辑,但是对于此示例,我需要python中的子类语法帮助。任何帮助表示赞赏。
MyHorizontalHeader(QWidget *parent = 0) : QHeaderView(Qt::Horizontal, parent)
{
connect(this, SIGNAL(sectionResized(int, int, int)), this,
SLOT(handleSectionResized(int)));
connect(this, SIGNAL(sectionMoved(int, int, int)), this,
SLOT(handleSectionMoved(int, int, int)));
setMovable(true);
}
void showEvent(QShowEvent *e)
{
for (int i=0;i<count();i++) {
if (!boxes[i]) {
QComboBox *box = new QComboBox(this);
boxes[i] = box;
}
boxes[i]->setGeometry(sectionViewportPosition(i), 0,
sectionSize(i) - 5, height());
boxes[i]->show();
}
QHeaderView::showEvent(e);
}
void handleSectionResized(int i)
{
for (int j=visualIndex(i);j<count();j++) {
int logical = logicalIndex(j);
boxes[logical]->setGeometry(sectionViewportPosition(logical), 0,
sectionSize(logical) - 5, height());
}
}
void handleSectionMoved(int logical, int oldVisualIndex, int newVisualIndex)
{
for (int i=qMin(oldVisualIndex, newVisualIndex);i<count();i++){
int logical = logicalIndex(i);
boxes[logical]->setGeometry(sectionViewportPosition(logical), 0,
sectionSize(logical) - 5, height());
}
}
void scrollContentsBy(int dx, int dy)
{
QTableWidget::scrollContentsBy(dx, dy);
if (dx != 0)
horizHeader->fixComboPositions();
}
void fixComboPositions()
{
for (int i=0;i<count();i++)
boxes[i]->setGeometry(sectionViewportPosition(i), 0,
sectionSize(i) - 5, height());
}
此示例源代码最初来自http://blog.qt.io/blog/2012/09/28/qt-support-weekly-27-widgets-on-a-header/
我希望最终创建一个可以在“ Qt Designer”中为我的QTableWidgets提升的自定义子类,从而可以使用带有组合框过滤器的自定义QTableWidget QHeaderView。
最佳答案
在PyQt / PySide中的子类开始是这样的:
class MyHorizontalHeader(QHeaderView):
def __init__(self, parent=None):
super(MyHorizontalHeader, self).__init__(Qt.Horizontal, parent)
def otherMethod(self):
...
...
第一行定义了类的名称和潜在的继承。
创建类的实例时,将调用
__init__
方法。它总是需要调用其继承的类的__init__
方法(这是PyQt / PySide的特定方法),这是通过super
完成的。关于python - Qt语法从C++转换为PyQt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36022708/