QT--QWidget的使用、获取窗体的几何信息、设置窗口大小、设置窗口固定大小、设置窗口最小大小、设置窗口最大大小、移动窗口、设置窗口标题、设置窗口的icons

通过实现以下的功能进行学习QWidget的相关功能和用法 

所有窗口类的基类

Qt 中有 3 个窗口的基类:QWidget、QMainWindow、QDialog

在创建 Qt 工程时,会让我们选择继承自哪一个窗口类

其中,QMainWindow、QDialog 都是继承自 QWidge

所有控件类的基类

Qt 中的控件类(按钮、输入框、单选框等)也属于窗口类

它们的基类也是 QWidget;

可以内嵌到其他窗口的内部,此时需要给其指定父窗口;

可以作为独立的窗口显示,此时不能给其指定父窗口;

因为各种操作很简单就不细讲了,下面只把更换图标过程说明一下,其他直接代码

 窗口标题、图标、资源文件

设置和获取窗口的标题,直接使用如下两个函数即可:

// 获取和设置窗口的标题
QString windowTitle() const;
void setWindowTitle(const QString &);

设置窗口的图标,需要一个 QIcon 对象,如下:

// 获取和设置窗口的图标
QIcon windowIcon() const;
void setWindowIcon(const QIcon &icon);

// 构造 QIcon 图标对象
// 有 6 个重载的构造方法,通常我们使用最后一个
// 参数为图标文件的路径
QIcon::QIcon(const QString &fileName);

首先将图标文件 logo_windows.svg,复制到项目目录 QWidgetTest 下的 icon 目录中,如下:

我使用是vs2022,使用qt create 更简单

保存后就生成URL,然后复制URL

 

窗口位置

// 1、设置窗体的几何信息
// 获取相对于当前窗口父窗口的几何信息:宽高、坐标点信息
const QRect &geometry() const;
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);

// 2、移动窗口。
// 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);

窗口大小

通常,窗口可以拖动其右下角,进行放大和缩小。我们可以设置窗口的最小大小和最大大小;

另外,窗口可以设置为固定大小,这样窗口就不能放大和缩小;

常用的设置大小的函数如下:

// 1、设置窗口尺寸
QSize size() const
void resize(int w, int h);
void resize(const QSize &);

// 2、设置最大尺寸
QSize maximumSize() const;
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);

// 3、设置最小尺寸
QSize minimumSize() const;
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);

// 4、设置固定尺寸
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);

// 5、单独设置窗口的高度
int height() const;
int minimumHeight() const;
int maximumHeight() const;

void setFixedHeight(int h);
void setMaximumHeight(int maxh);
void setMinimumHeight(int minh);

// 6、单独设置窗口的宽度
int width() const;
int minimumWidth() const;
int maximumWidth() const;

void setFixedWidth(int w);
void setMaximumWidth(int maxw);
void setMinimumWidth(int minw);

所有测试代码

#include "QWidgetTest.h"
#include <qdebug.h>
QWidgetTest::QWidgetTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //1.获取窗体的几何信息,采用匿名函数的槽函数,也可以使用普通函数操作,
    // 这里为了方便直接使用匿名函数操作
    connect(ui.on_getWidthHeight_clicked, &QPushButton::clicked, this, [this]() {
        // 获取相对于当前窗口的父窗口的集合信息:宽高、坐标点信息
        QRect rect = this->geometry();
        qDebug() << "左上角: " << rect.topLeft();
        qDebug() << "右上角:" << rect.topRight();
        qDebug() << "左下角:" << rect.bottomLeft();
        qDebug() << "右下角:" << rect.bottomRight();
        qDebug() << "宽度:" << rect.width();
        qDebug() << "高度:" << rect.height();
        });
    // 2. 设置窗口大小为500*500
    connect(ui.on_setHeightWidth_clicked, &QPushButton::clicked, this, [this]() {
        this->resize(500, 500);
        });
    // 3. 设置固定大小为600*600
    connect(ui.on_setStaticHeightWidth_clicked, &QPushButton::clicked, this, [this]() {
        this->setFixedSize(600, 600);
        });
    // 4. 设置窗口最小大小为400*400
    connect(ui.on_setMinHeightWidth_clicked, &QPushButton::clicked, this, [this]() {
        this->setMinimumSize(400, 400);
        });
    // 5.设置窗口最大大小为1000*1000
    connect(ui.on_setMaxHeightWidth_clicked, &QPushButton::clicked, this, [this]() {
        this->setMaximumSize(1000, 1000);
        });

    // 6. 移动到窗口(200,100)
    connect(ui.on_setMove_clicked, &QPushButton::clicked, this, [this]() {
        this->move(100, 100);
        });
    // 7. 设置窗口标题
    connect(ui.on_setWinTitle_clicked, &QPushButton::clicked, this, [this]() {
        this->setWindowTitle("测试修改窗口标题");
        });
    // 8. 设置窗口的icons
    connect(ui.on_setIcons_clicked, &QPushButton::clicked, this, [this]() {
        this->setWindowIcon(QIcon(":/QIcon/logo_windows.svg"));
        });
}

QWidgetTest::~QWidgetTest()
{

}


Qt中,要实现窗口的双击最大化和双击恢复原始大小的功能,你需要在窗体类(如`QWidget`、`QMainWindow`等)上覆盖鼠标点击事件,并跟踪窗口的状态。通常,我们会使用`QMetaObject`来检测点击次数。下面是一个简单的示例: ```cpp #include <QMainWindow> #include <QApplication> #include <QTimer> class MyWindow : public QMainWindow { public: MyWindow(QWidget *parent = nullptr) : QMainWindow(parent) { setMinimumSize(400, 300); // 设置默认窗口大小 // 创建一个定时器来检查是否连续两次单击 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, [this]() { if (isMaximized()) { // 如果窗口已经最大化 if (doubleClicked) { restoreGeometry(previousGeometry()); // 恢复原尺寸 doubleClicked = false; } else { showMaximized(); // 再次最大化 } } else { QSize originalSize = size(); resize(originalSize + QSize(50, 50)); // 双击缩小 doubleClicked = true; // 标记为已双击 QTimer::singleShot(100, timer, SLOT(stop())); // 延迟停止计时器,防止误触发 } }); timer->start(200); // 设置间隔时间(例如200毫秒) } private: bool doubleClicked = false; // 初始状态不认为是双击 QRect previousGeometry(); // 用于保存最大化前的几何信息 protected: void mousePressEvent(QMouseEvent *event) override { // 当鼠标按下时,记录当前窗口大小和是否最大化 if (event->button() == Qt::LeftButton && isMaximized()) previousGeometry_ = geometry(); QMainWindow::mousePressEvent(event); } private slots: void stopTimer() { timer->stop(); } }; // 定义previousGeometry函数,这里只是一个简化版,实际应用需要存储更详细的信息 QRect MyWindow::previousGeometry() { if (!isMaximized()) return QRect(); // 窗口最大化时返回空 return saveGeometry(); // 获取当前的最大窗口几何信息 } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWindow window; window.show(); return app.exec(); } ``` 在这个例子中,我们通过设置一个定时器来判断鼠标点击的时间间隔,如果两次点击之间小于设定的时间(这里设为200毫秒),则认为是双击。当窗口最大化时,连续双击会恢复到原来大小;非最大化状态下,双击会使窗口缩小。 注意,这只是一个基本的实现,实际应用可能需要处理更多边界情况以及用户交互的行为。此外,`previousGeometry()`函数在此处并未提供具体的实现,实际项目中需要根据窗口的特定需求去保存和读取窗口几何信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值