代码之家  ›  专栏  ›  技术社区  ›  mav

QWidget继承自自定义QWidget

  •  1
  • mav  · 技术社区  · 10 年前

    在Qt C++中,是否可以创建自定义 QWidget 然后重用此自定义 QWidget(QWidget) 为所有人 QWidget(QWidget) (继承了所有习俗 QWidget(QWidget) )项目的?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Angie Quijano Nejat    8 年前

    也许我误解了这个问题,但你可以创造你的习惯 QWidget ,然后到处使用。

    class derivedQWidget : public QWidget
    {
      Q_OBJECT
    
      derivedQWidget();
      virtual ~derivedQWidget();
    }
    
    class myWidget : public derivedQWidget 
    {
      ...
    }
    
    class myWidget2 : public derivedQWidget 
    {
      ...
    }
    

    如果问题是:我们能重新实现吗 QWidget(QWidget) ?, 不,你不能。

        2
  •  0
  •   mav    10 年前

    我用这种方式解决了:

    第一类, 小工具.h :

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QPushButton>
    #include <QMouseEvent>
    #include <QWidget>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = 0);
        virtual ~Widget();
    
        QPushButton *getBtn() const;
        void setBtn(QPushButton *value);
    
    protected:
        void mousePressEvent(QMouseEvent *evt);
        void mouseMoveEvent(QMouseEvent *evt);
    
    private:
        Ui::Widget *ui;
        QPushButton *btn;
        QPoint oldPos;
    };
    

    第二类 宽度扩展h ,继承自Widget:

    #ifndef WIDEXT_H
    #define WIDEXT_H
    
    #include "widget.h"
    
    namespace Ui {
        class widExt;
    }
    
    class widExt : public Widget
    {
    public:
        widExt();
    
    
    private slots:
        void on_dial_2_actionTriggered(int action);
    
    private:
        Ui::widExt *ui;
    };
    
    #endif // WIDEXT_H
    

    与亲属 宽度扩展.cpp :

    #include "widext.h"
    #include "ui_widext.h"
    
    widExt::widExt() : ui(new Ui::widExt)
    {
        ui->setupUi(this);
    }
    
    void widExt::on_dial_2_actionTriggered(int action)
    {
    
    }
    

    在这种模式下,我继承了第一个类的所有内容,并且可以独立地自定义其他类。