Получение ошибки преобразования QStyleOptionSpinBox в const QStyleOptionComplex * - PullRequest
0 голосов
/ 21 января 2019

Я создаю подкласс QSpinBox и пытаюсь получить субэлементы управления размерами прямоугольников стрелок вверх / вниз, как показано здесь с python и pyside. Однако я получаю ошибки при попытке конвертировать мой код в C ++.

Вот рабочий пример Python, который я пытаюсь преобразовать в Qt / C ++

import sys
import os
from PySide import QtGui, QtCore

class SuperSpinner(QtGui.QSpinBox):
    def __init__(self, parent=None):
        super(SuperSpinner, self).__init__(parent)

    def contextMenuEvent(self, event):
        opt = QtGui.QStyleOptionSpinBox()
        self.initStyleOption(opt)
        r = QtCore.QRect()
        for sc in (QtGui.QStyle.SC_SpinBoxUp, QtGui.QStyle.SC_SpinBoxDown):
            r= r.united(self.style().subControlRect(QtGui.QStyle.CC_SpinBox, opt, sc, self))
        if r.contains(event.pos()):
            self.setValue(0)
            self.selectAll()
        else:
            super(self.__class__, self).contextMenuEvent(event)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = SuperSpinner()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

Сообщение об ошибке в Qt при попытке компиляции enter image description here

Основные биты файла CPP:

#include "intsuperspinbox.h"
#include <QMouseEvent>
#include <QStyleOptionSpinBox>
#include <QCommonStyle>
#include <QStyle>
#include <QDebug>

IntSuperSpinBox::IntSuperSpinBox(QWidget *parent) :
    QSpinBox(parent)
{
    setMouseTracking(true);
}

void IntSuperSpinBox::contextMenuEvent(QContextMenuEvent *event)
{
    QStyleOptionSpinBox opt;
    opt.initFrom(this);

    // ERRORS HERE
    QRect upRect(this->style()->subControlRect(QStyle::CC_SpinBox, opt, QStyle::SC_SpinBoxUp, this));

    QSpinBox::contextMenuEvent(event);
}

1 Ответ

0 голосов
/ 21 января 2019

Второй параметр QStyle::subControlRect должен иметь тип QStyleOptionComplex*, поэтому вам нужно ...

    QRect upRect(this->style()->subControlRect(QStyle::CC_SpinBox, &opt, QStyle::SC_SpinBoxUp, this));

Примечание &opt, а не просто opt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...