qt c++类继承QWidget和不继承有什么区别

 class CheckBoxSetting
{
    Q_OBJECT
public:
    CheckBoxSetting();
};

和
class CheckBoxSettingsEditor : public QWidget
{
    Q_OBJECT

public:
    explicit CheckBoxSettingsEditor(QWidget *parent = 0);
    ~CheckBoxSettingsEditor();

有什么区别?

这两个类 CheckBoxSettingCheckBoxSettingsEditor 之间有几个关键的区别,包括继承关系、构造函数定义、以及用途。以下是详细说明:

CheckBoxSetting

class CheckBoxSetting { Q_OBJECT public: CheckBoxSetting(); };
  • 继承关系CheckBoxSetting 类没有继承自任何类。它是一个普通的 C++ 类,没有从 Qt 的任何类继承。
  • 构造函数:定义了一个默认构造函数 CheckBoxSetting(),没有参数。
  • 用途:由于没有继承自 Qt 的任何类,因此它不能作为 Qt 的 GUI 组件使用。这个类可能用于处理数据或逻辑,而不是用户界面。

CheckBoxSettingsEditor

class CheckBoxSettingsEditor : public QWidget { Q_OBJECT public: explicit CheckBoxSettingsEditor(QWidget *parent = 0); ~CheckBoxSettingsEditor(); };
  • 继承关系CheckBoxSettingsEditor 继承自 QWidget。这意味着 CheckBoxSettingsEditor 是一个 Qt 的窗口部件,可以用来构建用户界面。
  • 构造函数
    • explicit CheckBoxSettingsEditor(QWidget *parent = 0):构造函数接受一个 QWidget 指针作为父窗口部件的参数,默认值为 0(即 nullptr),这意味着可以不指定父窗口部件。
    • ~CheckBoxSettingsEditor():定义了一个析构函数,用于清理对象。
  • 用途:作为 QWidget 的子类,CheckBoxSettingsEditor 可以用来创建自定义的 GUI 组件或窗口。它可以放置在其他窗口或对话框中,或者单独使用。

主要区别

  1. 继承关系

    • CheckBoxSetting 没有继承自任何类。
    • CheckBoxSettingsEditor 继承自 QWidget
  2. 用途

    • CheckBoxSetting 是一个普通类,可能用于处理数据或逻辑。
    • CheckBoxSettingsEditor 是一个 GUI 组件,可以在 Qt 应用程序中使用以创建用户界面。
  3. 构造函数

    • CheckBoxSetting 有一个默认构造函数 CheckBoxSetting()
    • CheckBoxSettingsEditor 有一个接受 QWidget 指针作为参数的构造函数,并且定义了一个析构函数。

使用示例

CheckBoxSetting
CheckBoxSetting::CheckBoxSetting() { // 初始化代码 }
CheckBoxSettingsEditor
CheckBoxSettingsEditor::CheckBoxSettingsEditor(QWidget *parent) : QWidget(parent) { // 初始化代码 } CheckBoxSettingsEditor::~CheckBoxSettingsEditor() { // 清理代码 }

总结来说,CheckBoxSetting 类更像是一个用于处理非 GUI 逻辑的类,而 CheckBoxSettingsEditor 是一个用于构建和管理用户界面的类。

Qt中,如果你想要自定义QWidget的形状并重新绘制其外观,你可以使用 QPainter 和 QPainterPath 来实现图形绘制。以下是一个简化的步骤: 1. **继承QWidget**:首先,你需要创建一个新的继承QWidget,这样你就可以重写它的paintEvent()方法来处理绘画。 ```cpp class CustomShapeWidget : public QWidget { Q_OBJECT public: CustomShapeWidget(QWidget* parent = nullptr); protected: void paintEvent(QPaintEvent*) override; private: // 添加其他需要的成员变量和绘制工具 }; ``` 2. **QPainter和QPainterPath**:在paintEvent()方法中,创建一个QPainter对象并将其绑定到你的窗口。 ```cpp void CustomShapeWidget::paintEvent(QPaintEvent* event) { QPainter painter(this); // 使用QPainterPath绘制形状 } ``` 3. **绘制路径**:使用QPainterPath来定义你想要的形状,添加曲线、直线等,然后使用`painter.drawPath()`或`painter.fillPath()`来绘制或填充路径。 ```cpp void CustomShapeWidget::paintEvent(QPaintEvent* event) { QPainter painter(this); QPainterPath path; // 添加路径元素,如矩形、圆形、弧线等 path.addRect(QRectF(10, 10, 100, 100)); // 基本矩形示例 path.arcTo(QRectF(50, 50, 80, 80), 90, 90); // 弧形 // 使用路径进行绘制或填充 painter.drawPath(path); } ``` 4. **自定义样式**:如果你想更进一步,可以使用QStyleOption和QPainter的setPen()、setBrush()方法来自定义线条颜色、填充色等。 ```cpp void paintEvent(QPaintEvent* event) { // ... QStyleOption opt; initStyleOption(&opt); painter.setPen(opt.palette.color(QPalette::Window)); painter.drawPath(path); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值