QMainWindow作为QWidget子窗口,实现自定义无边框标题栏

Qt:自定义标题栏(QMainWindow) 简述        通过qss自定义外观后,发现标题栏的外观未发生变化,与整体的风格不融洽。因为程序的最外层边框加载的是系统本地的窗口。为了使风格统一,我们可以自定义一个标题栏来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭的按钮,并控制其风格与主界面一致。        网上有很多Qt自定义标题栏的代码。这里分享一个我觉得较好的自定义标题栏。与其他代码不同,其把对主窗口的相关 阅读详情

需求如下:

QMainWindow无边框,但是又要菜单栏、多窗口、dockwidget。

这时候无边框就很蛋疼,不好拉伸,没地方拖动。

那么变个思路,把QMainwindow嵌入到qwidget中,然后在qwidget中layout实现嵌套,这时候就灵活多了,截图:

代码:

Widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include "mainwindow.h"

#include <QBoxLayout>
#include <QLabel>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QVBoxLayout *vl = new QVBoxLayout;
    QLabel *lbl = new QLabel("this is label",this);
    vl->addWidget(lbl);
    pMwin = new MainWindow(this);
    pMwin->show();
    vl->addWidget(pMwin);
    lbl = new QLabel("this is label bottom",this);
    vl->addWidget(lbl);
    setLayout(vl);
}

Widget::~Widget()
{
    delete ui;
}

Mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    qDebug() <<"flags:"<<windowFlags();
    setWindowFlag(Qt::FramelessWindowHint);
    qDebug() <<"flags+frameless:"<<windowFlags();
    setWindowFlags(Qt::FramelessWindowHint |Qt::Widget);
    qDebug() <<"only frameless:"<<windowFlags();
}

MainWindow::~MainWindow()
{
    delete ui;
}

main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

QMainWindow无边框(自定义标题栏) 一.总体思路 1.重写QMenuBar插入MainWindow 参考 https://blog.youkuaiyun.com/gnibuoz/article/details/105970328 2.QWidget插入MainWindow(setMenuWidget(w);本文采用方法) 二.代码 头文件 #ifndef KQTILTLE_H #define KQTILTLE_H #include <QWidget> #include <QPushButton> namespace Ui 阅读详情

相关推荐

QT学习---QMainWindow

QT学习---QMainWindow

DUANJIAWEIDUANJIAWEI的博客 1682

QT5 将QDocWidget的上边框去掉

QT5 将QDocWidget的上边框去掉 当使用QDocWidget时,会出现一个黑色边框,如下图所示: 若想去掉这个黑色边框,则需要采取以下方法: 这个黑色边框看起来是一个边框,实际上是一个widget,所以想办法删除它。 解决方法: 先获取到这个widget,这个widget叫做titleBarWidget。 然后,用一个空的widget来取代它 最后删除这个黑色的ti

化天际的相遇---博客 4404

Qt之QDockWidget窗口详解—含演示Demo

Qt之QDockWidget窗口详解—含演示Demo

ManagerUser的博客 1万+

【Qt】自定义标题栏

功能包含:窗口最大化,最小化,关闭;双击标题栏最大化或复位;鼠标按压标题栏可以拖拽窗体位置;鼠标滑过窗口边缘位置时切换鼠标样式;鼠标在窗口边缘位置按压后移动鼠标可以缩放窗体。

卡钦斯基的博客 3929

Qt 窗口部件 QMainWindow、QWidget、QDialog 使用原则

显示模态对话框最常见的方法是调用其exec()函数,当用户关闭对话框,exec()将提供一个有用的返回值,并且这时流程控制继续从调用exec()的地方进行。对于进度对话框来说,调用setModal(true)是非常有用的,用户必须拥有与其交互的能力,例如:取消长时间运行的操作。如果隐藏对话框后调用show()函数,对话框将显示在其原始位置,这是因为窗口管理器决定的窗户位置没有明确由程序员指定,为了保持被用户移动的对话框位置,在closeEvent()中进行处理,然后在显示之前,将对话框移动到该位置。

m0_73482095的博客 1125

Qt无边框窗口实战:事件机制与自定义标题栏实现

在桌面应用开发中,界面与交互是两个绕不开的核心命题。无边框窗口作为现代客户端常见的视觉形态,去除了系统标题栏,为设计留出更大自由,但同时也带来了一系列需要开发者自行解决的窗口行为问题。要构建顺畅的交互体验,理解事件分发、事件冒泡与事件过滤等基础原理至关重要。只有掌握鼠标事件坐标体系、拖拽偏移量计算以及父子控件之间的事件传递规则,才能实现窗口拖动、按钮点击、双击最大化等无缝操作。这类技术广泛应用于需要自定义标题栏、圆角、毛玻璃效果等场景,例如即时通讯工具、影音播放器、设计软件等。本文以 Qt 为技术栈,从零搭

weixin_34318326的博客 465

Qt6入门教程 9:QWidget、QMainWindow和QDialog

在用Qt Creator创建Qt Widgets项目时,会默认提供三种基类以供选择,它们分别是QWidget、QMainWIndow和QDialog,其中QMainWindow和QDialog的基类都是QWidget。

草上爬的博客 5508

Qt自定义标题栏全攻略:从无边框窗口到完整交互实现

在桌面应用开发中,窗口系统是用户交互的基础框架,其核心组件标题栏承载着窗口管理的关键功能。通过事件机制与布局管理,开发者可以突破操作系统默认样式的限制,实现界面视觉与行为的深度定制。这一技术不仅提升了应用界面的统一性和品牌辨识度,更为复杂业务控件的集成提供了可能,常见于需要独特视觉风格的软件、专业工具以及跨平台统一体验的项目中。本文聚焦Qt框架下的实现方案,详细解析如何通过无边框窗口结合自定义Widget,构建支持拖拽、按钮交互且适配多DPI环境的健壮标题栏,并针对开发中常见的窗口抖动、事件拦截等实际问题提

weixin_33845881的博客 302

Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)

QMainWindow、QWidget和QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用。

不脱发的程序猿 3万+

硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接

在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。

FCZlll的博客 2646

MedicalNet实战:3D医疗影像分割从零到部署(PyTorch+ResNet50)

本文详细介绍了基于PyTorch和MedicalNet预训练模型进行3D医疗影像分割的完整实战流程。通过加载ResNet50预训练权重进行迁移学习,大幅降低了对标注数据量的需求,并提升了模型性能。文章涵盖了从数据准备、模型微调、训练优化到最终部署的每一步,为医疗AI开发者提供了从零到部署的清晰指南。

weixin_29062671的博客 589

Qt第二十七章:QWidget、QMainWindow无边框自定义标题栏并自由移动、缩放、圆角

QWidget、QMainWindow自定义标题栏并自由移动缩放

Good Luck 3391

汽车级智能栅极驱动器深度解析 | 连载01:DRV871x-Q1系列产品架构与核心特性

集成度:单芯片集成多通道驱动器、电源管理、电流检测智能化:自适应控制算法,减少外部元件可靠性:多重保护机制,满足汽车级要求灵活性:SPI和硬件两种接口,适应不同应用需求。

VehSwHwDeveloper的博客 1154

qmainwindow 标题栏_Qt:自定义标题栏(QMainWindow)

简述通过qss自定义外观后,发现标题栏的外观未发生变化,与整体的风格不融洽。因为程序的最外层边框加载的是系统本地的窗口。为了使风格统一,我们可以自定义一个标题栏来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭的按钮,并控制其风格与主界面一致。网上有很多Qt自定义标题栏的代码。这里分享一个我觉得较好的自定义标题栏。与其他代码不同,其把对主窗口的相关处理事件都封装在标题栏类中,使用的时候,通过...

weixin_32287801的博客 2467

YOLOV12进阶:MSDA多尺度空洞注意力机制解析与实战,突破检测尺度瓶颈

在目标检测中,“尺度差异”是个老大难问题——大目标占据画面大半,小目标可能只有几个像素,普通模型很难同时精准检测。而MSDA(Multi-Scale Dilated Attention,多尺度空洞注意力)就像给模型配备了“变焦眼镜”,能同时关注不同尺度的目标,让YOLOV12在大、中、小目标检测上都能表现出色。这篇教程会带你从原理到实操,掌握这个强大的注意力机制,让你的检测模型真正“通吃”各种尺度的目标。MSDA的“多尺度空洞注意力”设计,是目标检测突破尺度瓶颈的关键一步。

know_F0727的博客 264

自顶向下与自底向上编程思想的对比

一、核心定义与本质差异自顶向下编程思想如同绘制一幅完整的地图,从整体轮廓逐步细化到局部细节。其本质是从系统的整体目标出发,通过逐层分解将复杂问题简化为可实现的子问题,强调先定义 “做什么”,再考虑 “如何做”。自底向上编程思想则类似于搭建积木,从基础组件开始逐步构建复杂系统。其本质是从现有资源和基础功能出发,通过组合和扩展简单组件来实现复杂功能,强调先解决 “如何做” 的细节,再整合为 “做什么” 的整体。二、设计起点与逻辑流程对比设计起点:以系统的整体目标和业务需求为起点。例如设计一个电商平台,首先明确

二进制君 834

Qt界面美化自定义边框之QMainWindow边框

问题的来源是别人已经写好了一个项目需要界面美化,项目初期构建的时候没有考虑好,最底层的窗口是QMainWindow,在自定义边框的时候无法使用通常的继承QWidget的方法。本文使用了在最底层再创建一个含有自定义边框QWidget来承载所以界面的方法。

CHENxiaoni_的博客 5852

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

算法大师! 293

Qt第二十六章:QWidget、QMainWindow自定义标题栏

QWidget、QMainWindow自定义标题栏

Good Luck 2986

【AUTOSAR-E2E】-2.3-配置E2E:基于E2EPW配置一个RX接收的Signal Group(使用E2E Profile 1)

《共13页精讲》:此法也适用于E2E Profile 4/5/6/7/11/22 目录 1 检查CAN Matrix Arxml/DBC是否满足E2E需求 2 在DaVinci Developer中为Port添加E2E保护 3 在DaVinci Configurator settings设置 4 如何使用应用层的E2E保护 5 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <-.

「汽车电子助手」的博客 3953

S7-200SMART PLC中进行MODBUS RTU通信的3种方法(1)

S7-200SMART PLC中进行MODBUS RTU通信的3种方法(1)

Robot_PLC_HMI_Automation 4240

Qt UI设计之《自定义标题栏可移动拖拽窗口》

该窗口自定义标题栏,窗口可移动,可伸缩,使用的是系统自带隐形边框 窗口分为三个控件:主窗口QMainWindows,标题栏QWidget,客户端QWidget 1 标题栏相关代码 #pragma once #include <QWidget> class uititlebar : public QWidget { Q_OBJECT public: uititlebar(QWidget *parent = Q_NULLPTR); ~uititlebar(); protected: v

qq_27096221的博客 4884

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Qt无边框窗口自定义标题栏实现:从事件处理到跨平台优化

在桌面应用开发中,图形用户界面(GUI)的定制化是提升应用品牌辨识度和用户体验的关键。Qt框架作为跨平台C++ GUI开发的主流选择,其事件处理机制和部件系统为深度定制提供了基础。通过重写鼠标事件(mousePressEvent、mouseMoveEvent等)和布局管理,开发者可以拦截并处理用户交互,实现原生窗口管理器功能,如窗口拖拽、边缘拉伸和状态控制。这一技术方案的核心价值在于突破了操作系统默认外观的限制,为现代化、扁平化设计的工具软件、媒体播放器或仪表盘应用提供了统一的视觉风格和沉浸式体验。本文以Q

weixin_33726313的博客 420

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

QWidget无边框无标题栏窗体 可拖动可拉伸

通常我们不想使用QMainWindow提供的标题栏,或者是QWidget的标题栏、边框,这时候我们使用了一个普通的QWidget,没有标题栏没有边框,但我们又需要有标题栏拖动的功能,边框改变大小的功能,看上去是个很矛盾的想法,所以…我们只能自己实现了。 直接贴代码吧: CMainWindow.h class CMainWindow : public QWidget { Q_OBJECT...

bubbleyang的博客 2647

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: QSqlQuery 如何与数据库 QSqlDatabase 关联 保持连接
下一篇: 在Windows上编译QtCreator 6
#Page#
博客等级 码龄23年 1691粉丝 360原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值