Qt学习日记|Qt程序设计(1)

本文介绍了Qt编程中的四个关键概念:布局管理器、信号与槽机制、模态和非模态对话框,以及在学习过程中遇到的QPushButton、QHBoxLayout、QBoxLayout构造函数和setSizePolicy函数的用法。同时提到了new关键字、explicit关键字和转换函数在Qt中的应用。
摘要由CSDN通过智能技术生成

一、四个重要概念

布局管理器、信号与槽、模态、半模态和非模态对话框。

二、学习示例代码时遇到的不熟悉的点

1.QPushButton构造函数

QPushButton是Qt框架中用于创建按钮的组件类,它是QWidget的子类。QPushButton构造函数的定义如下:

QPushButton(QWidget *parent = nullptr, const QString &text = QString())

在这个构造函数中,第一个参数parent指向父窗口,如果这个参数为0,则该按钮就成为一个顶级窗口。第二个参数text则是设置按钮上显示的文本内容。

2.QHBoxLayout的构造函数

QHBoxLayout的构造函数有以下几种形式:

1. QHBoxLayout():默认构造函数,创建一个水平布局。
2. QHBoxLayout(QWidget *parent):带有父窗口的构造函数,创建一个水平布局。
3. QHBoxLayout(int margin, QWidget *parent = nullptr):带有边距和父窗口的构造函数,创建一个水平布局。margin参数表示边距大小。
4. QHBoxLayout(int arg, Qt::Alignment alignment, QWidget *parent = nullptr):带有对齐方式和父窗口的构造函数,创建一个水平布局。arg参数表示对齐方式,alignment参数表示对齐方式的具体设置。

Qt::Alignment alignment可以取以下值:

  • Qt::AlignLeft:左对齐
  • Qt::AlignRight:右对齐
  • Qt::AlignTop:顶部对齐
  • Qt::AlignBottom:底部对齐
  • Qt::AlignCenter:居中对齐
  • Qt::AlignJustify:两端对齐(默认)
enum Qt::Alignment {
    Qt::AlignLeft = 0x0001, // 左对齐
    Qt::AlignRight = 0x0002, // 右对齐
    Qt::AlignTop = 0x0004, // 顶部对齐
    Qt::AlignBottom = 0x0008, // 底部对齐
    Qt::AlignCenter = 0x0010, // 居中对齐
    Qt::AlignJustify = 0x0020 // 两端对齐(默认)
};

5. QHBoxLayout(const QLayout *other, QWidget *parent = nullptr):拷贝构造函数,创建一个与另一个布局相同的水平布局。other参数表示被拷贝的布局对象。

3.QBoxLayout类的声明

不完整,目前先了解public访问类型的。

#include <QLayout>

class QBoxLayout : public QLayout
{
    Q_OBJECT
public:
    enum BoxDirection { TopToBottom, LeftToRight, RightToLeft, BottomToTop };

    explicit QBoxLayout(QWidget *parent = nullptr);
    explicit QBoxLayout(BoxDirection direction, QWidget *parent = nullptr);

    void addItem(QLayoutItem *item) override;
    void addWidget(QWidget *widget, int stretch = 0) override;
    QSize sizeHint() const override;
    void setGeometry(const QRect &rect) override;

protected:
    void invalidate();
    bool hasHeightForWidth() const override;
    int heightForWidth(int w) const override;
    int doLayout(QRect rect, bool testOnly) const override;
    int count() const override;
    QLayoutItem *itemAt(int index) const override;
    Qt::Orientation orientation() const override;

private:
    QVector<QLayoutItem *> itemList;
    BoxDirection direction;
};

3.setSizePolicy()

setSizePolicy是Qt框架中的一个函数,主要用于设置部件(widget)在布局中的调整行为和约束条件,以便在窗口大小发生变化时自动调整。具体来说,这个函数用于指定部件在布局中的最小、最大和预期大小等参数。

在Qt中,对于widget的大小策略设置,不能直接调用setSizePolicy()函数,而是需要先后调用setHorizontalPolicy()和setVerticalPolicy()来分别设定其在水平和垂直方向上的策略。例如:

QSizePolicy sizePolicy = this->sizePolicy();
//this->sizePolicy() 是一个成员函数调用,它返回当前对象的尺寸策略。
//然后,将返回的策略赋值给 sizePolicy 变量,以便后续使用或修改该策略。
sizePolicy.setHorizontalPolicy(QSizePolicy::Minimum);
sizePolicy.setVerticalPolicy(QSizePolicy::Maximum);

4.QSpacerItem的构造函数

QSpacerItem(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum)

附:

有些遗忘了的概念。

1.new 的用法

它的作用是在堆上创建一个新的对象,并返回指向该对象的指针。

int *p = new int; // 创建一个整型指针 p,并为其分配内存
*p = 10; // 将指针 p 所指向的内存中的值设置为 10
delete p; // 释放指针 p 所指向的内存

2.explicit

explicit是C++中的一个关键字,表示构造函数或转换函数不能被隐式调用。

class MyClass {
public:
    explicit MyClass(int x) {}
};

MyClass obj = 10; // 错误,不能通过隐式类型转换来调用构造函数
MyClass obj2(10); // 正确,需要显式地调用构造函数

3.转换函数

转换函数(Conversion Function)是C++中一种特殊的成员函数,用于将一个类的对象转换为其他类型的对象。转换函数通常定义为类的成员函数,其返回值类型为目标类型,并且没有参数列表。

例如,假设有一个名为MyClass的类,它包含一个int类型的私有成员变量x,我们可以定义一个转换函数将其转换为int类型:

class MyClass {
private:
    int x;
public:
    MyClass(int x) : x(x) {} //构造函数
    operator int() const { return x; } // 转换函数
};

在这个例子中,我们定义了一个名为operator int()的转换函数,它将MyClass对象转换为int类型。这个转换函数可以被隐式调用,例如:

MyClass obj(10);
int y = obj; // 隐式调用转换函数,将obj转换为int类型

需要注意的是,如果一个类中定义了多个转换函数,只有最匹配的转换函数才会被调用。例如:

class MyClass {
private:
    int x;
public:
    MyClass(int x) : x(x) {}
    operator int() const { return x; } // 转换函数1
    operator double() const { return static_cast<double>(x); } // 转换函数2
};

在这个例子中,如果我们尝试将MyClass对象转换为double类型,只有转换函数2会被调用:

MyClass obj(10);
double z = obj; // 调用转换函数2,将obj转换为double类型

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值