【问题标题】:Qt inherit QSpinBox and QPushButtonQt继承QSpinBox和QPushButton
【发布时间】: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


【解决方案1】:

是的,当 numPad 关闭时,值在 QSpinBox 中设置。问题是当我单击 QSpinBox 时打开 numPad。

目前我使用此代码进行管理:

#include <QSpinBox>
#include <QPushButton>
#include <QMoveEvent>
#include <QResizeEvent>

class CustomQSpinBox: public QSpinBox
{
  Q_OBJECT

public:
  CustomQSpinBox(QWidget *parent = 0);
  ~CustomQSpinBox();

  void resizeEvent(QResizeEvent *event);
  void moveEvent(QMoveEvent * event);

signals:
  void needNumpad();

public slots:
  void clicked();

private:
  QPushButton * button;

};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多