QT 自定义标题栏

本文介绍了如何在QT中去除窗口标题栏并自定义美观的标题栏。通过修改centralWidget布局,如选择QVBoxLayout,实现界面的个性化设计。同时提供了头文件userdefineframe.h、cpp文件userdefineframe.cpp的示例代码,指导在main.cpp中如何使用自定义标题栏。
摘要由CSDN通过智能技术生成

自定义标题栏

要想做出好看的界面,qt自带的标题栏必须抛弃掉。

如何去掉qt窗口的标题栏

只需添加this->setWindowFlags(Qt::FramelessWindowHint)

以下是去掉标题栏的例子:

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::FramelessWindowHint);//去掉窗口标题栏
}

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

修改centralWidget布局

Qt的布局有4种

Qt4种布局

四种布局方法:

  1. 水平布局类QHBoxLayout

  2. 垂直布局类QVBoxLayout

  3. 网格布局类QGridLayout

  4. 表单布局类QFormLayout

centralWidget默认布局是不可修改的

centralWidget默认是布局是不可修改的

要在centralWidget,需要对ui文件进行修改,但是在qt编辑模式里面提示mainwindow.ui这个文件只能在design模式下修改。

可是在qt里面提示mainwindow.ui这个文件只能在design模式下修改

要对qt的ui文件进行自定义修改,我们可以使用vim、sublime等文本编辑器直接打开ui文件

在对应的位置上添加布局(4选1):

<layout class="QVBoxLayout" name="verticalLayout"/>
<layout class="QHBoxLayout" name="horizontalLayout"/>
<layout class="QGridLayout" name="gridLayout"/>
<layout class="QFormLayout" name="formLayout"/>

修改前:

<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow" >
  <property name="geometry" >
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle" >
   <string>MainWindow</string>
  </property>
  <widget class="QMenuBar" name="menuBar" />
  <widget class="QToolBar" name="mainToolBar" />
  <widget class="QWidget" name="centralWidget" />
  <widget class="QStatusBar" name="statusBar" />
 </widget>
 <layoutDefault spacing="6" margin="11" />
 <pixmapfunction></pixmapfunction>
 <resources/>
 <connections/>
</ui>

修改后(例子:centralWidget添加垂直布局):

<ui
Qt 中,可以通过自定义 QWidget 的 paintEvent() 函数来实现自定义标题栏。具体步骤如下: 1.创建一个新的 QWidget,用于作为自定义标题栏。 2.将 QWidget 的窗口标志设置为 Qt::WindowFlags(Qt::FramelessWindowHint),这样可以去掉默认的标题栏。 3.重写 QWidget 的 paintEvent() 函数,在该函数中绘制自定义标题栏。 4.将 QWidget 设置为 QMainWindow 的标题栏,即调用 QMainWindow 的 setWindowTitle() 函数,并将其参数设置为自定义标题栏的指针。 下面是一个简单的示例代码: ``` #include <QtWidgets> // 继承 QWidget,作为自定义标题栏 class CustomTitleBar : public QWidget { public: CustomTitleBar(QWidget *parent = nullptr) : QWidget(parent) { // 设置窗口标志 setWindowFlags(Qt::FramelessWindowHint); } protected: void paintEvent(QPaintEvent *) override { QPainter painter(this); painter.fillRect(rect(), Qt::blue); painter.drawText(rect(), Qt::AlignCenter, "Custom Title Bar"); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; // 设置主窗口标题 mainWindow.setWindowTitle("Main Window"); // 创建自定义标题栏 CustomTitleBar *titleBar = new CustomTitleBar(&mainWindow); // 设置自定义标题栏为主窗口的标题栏 mainWindow.setMenuWidget(titleBar); mainWindow.show(); return app.exec(); } ``` 运行该程序,可以看到自定义的蓝色标题栏。你可以根据自己的需要修改 paintEvent() 函数,来实现各种不同样式的标题栏
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值