qt窗口无边框可拖动、右键菜单、自适应

该博客介绍了如何在Qt中创建一个无边框窗口,使其可拖动、拥有右键菜单,并实现窗口大小自适应。通过设置窗口标志、捕获鼠标事件和处理键盘事件来实现窗口操作。同时,利用QMenu创建右键菜单,监听键盘快捷键。此外,还详细说明了如何保存和调整子窗口的初始大小及字体,以实现窗口大小变化时的布局自适应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// .h

/* 若窗口是从QDialog继承下来,设置窗口无标题需要加上Qt::Dialog项,否则即使设置了 Qt::FramelessWindowHint,窗口一样有标题,如下:

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);

*/

#pragma once

#include <QtWidgets/QWidget>
#include "ui_FaceDetectDemo.h"

class FaceDetectDemo : public QWidget
{
    Q_OBJECT

public:
    FaceDetectDemo(QWidget *parent = Q_NULLPTR);
    ~FaceDetectDemo();

    void ShowWidget();
    void CloseWidget();
private slots:

    // 右键菜单
    void RightMouseKeyClicked(const QPoint &point);
    void ShowWindowMinimize(); // 窗口最小化
private:
    void FindWidgetAllChildren();
protected:
    void mousePressEvent(QMouseEvent *);
    void mouseReleaseEvent(QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *);
    void keyPressEvent(QKeyEvent *);
    void closeEvent(QCloseEvent *);
    void resizeEvent(QResizeEvent *);
private:
    Ui::FaceDetectDemoClass ui;

    // 移动窗口
    QPoint m_point;
    bool m_bPress;

    // 保存最开始的大小和字体
    struct AutoResize
    {
        QRect m_rect;
        QFont m_font;
    };

    QRect m_rect;
    QFont m_font;
    QMap<QWidget*, AutoResize> m_wdgtMapSize; //保存所有窗口最开始大小和字体
};
 

//.cpp

#include <qlabel.h>
#include <qimage.h>
#include <qstring.h>
#include <qdatetime.h>
#include <QDesktopWidget>
#include <QMouseEvent>
#include <qmenu.h>
#include "FaceDetectDemo.h"

FaceDetectDemo::FaceDetectDemo(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

    // 获取屏幕分辨率大小,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值