【发布时间】:2023-04-07 21:50:01
【问题描述】:
我想创建我的 CustomQSpinBox 。
这个 CustomQSpinBox 必须继承 QPushButton 和 QSpinBox 但是当我编译这段代码时:
#include <QSpinBox>
#include <QPushButton>
class CustomQSpinBox : public QSpinBox, public QPushButton
{
Q_OBJECT
public:
CustomQSpinBox (QWidget *parent = 0);
~CustomQSpinBox ();
void initMinMax(int min, int max);
void init();
signals:
void needNumpad();
public slots:
void clicked();
};
我收到一个错误:
erreur : C2594: 'static_cast'ÿ: Conversions ambigu‰s de 'QObject *' en '自定义QSpinBox *'
我必须如何继承?
【问题讨论】:
-
你到底为什么要从两个类继承(两者都源自 QObject 给你的错误......“钻石问题”en.wikipedia.org/wiki/Multiple_inheritance)?您应该只需要从 QSpinBox 本身派生(或者更准确地说,一个继承自 QSpinBox 的 CustomSpinBox 类和一个从 QPushButton 继承的 CustomPushButton (如果需要)
-
我需要知道用户何时点击了 QSpinBox。 QSpinBox 有 ButtonSymbols = noButton
-
那么你可以完全依赖标准的 QObjects 并使用 qt 的信号/槽系统(将 valueChanged() 信号设置为你想要的槽)参见信号qt-project.org/doc/qt-4.8/qspinbox.html 这里和信号/槽在这里解释:qt-project.org/doc/qt-4.8/signalsandslots.html
-
QSpinBox 是只读的,当我点击时,它会打开一个小键盘。所以我不能使用 valueChanged。
-
并且您的 numPad 在您的(只读)QSpinBox 上执行 setValue()?
setValue() will emit valueChanged() if the new value is different from the old one.(警告:如果你说不,那么我很可能会问你为什么首先使用那个旋转框)
标签: qt5 qpushbutton qspinbox