Qt自定义标题栏【即取即用模板】

头文件

cpp 复制代码
#ifndef TITLEWDG_H
#define TITLEWDG_H

#include <QWidget>

namespace Ui {
class TitleWdg;
}

class TitleWdg : public QWidget
{
    Q_OBJECT

public:
    explicit TitleWdg(QWidget *parent = nullptr);
    ~TitleWdg();    

signals:
    void maximize();
    void minimize();
    void closeWindow();

protected:
    void paintEvent(QPaintEvent *event);

private slots:
    void on_close_clicked();
    void on_min_clicked();
    void on_max_clicked();

private:
    Ui::TitleWdg *ui;
};

#endif // TITLEWDG_H

源文件

cpp 复制代码
#include "titlewdg.h"
#include "ui_titlewdg.h"

#include <QPainter>
#include <QStyleOption>

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

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

void TitleWdg::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)
    QStyleOption opt;
    opt.init(this);

    QPainter painter(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
}

void TitleWdg::on_close_clicked()
{
    closeWindow();
}

void TitleWdg::on_min_clicked()
{
    minimize();
}

void TitleWdg::on_max_clicked()
{
    maximize();
}

UI文件

cpp 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>TitleWdg</class>
 <widget class="QWidget" name="TitleWdg">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>636</width>
    <height>33</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QHBoxLayout" name="horizontalLayout">
   <property name="leftMargin">
    <number>9</number>
   </property>
   <property name="topMargin">
    <number>5</number>
   </property>
   <property name="rightMargin">
    <number>9</number>
   </property>
   <property name="bottomMargin">
    <number>5</number>
   </property>
   <item>
    <widget class="QLabel" name="logo">
     <property name="text">
      <string/>
     </property>
    </widget>
   </item>
   <item>
    <widget class="QLabel" name="title">
     <property name="text">
      <string/>
     </property>
    </widget>
   </item>
   <item>
    <spacer name="horizontalSpacer">
     <property name="orientation">
      <enum>Qt::Horizontal</enum>
     </property>
     <property name="sizeHint" stdset="0">
      <size>
       <width>366</width>
       <height>20</height>
      </size>
     </property>
    </spacer>
   </item>
   <item>
    <widget class="QToolButton" name="min">
     <property name="text">
      <string/>
     </property>
    </widget>
   </item>
   <item>
    <widget class="QToolButton" name="max">
     <property name="text">
      <string/>
     </property>
    </widget>
   </item>
   <item>
    <widget class="QToolButton" name="close">
     <property name="text">
      <string/>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

qss

cpp 复制代码
#titleWdg
{
    color: #cdcdcd;
    background-color: #434343;
}

#titleWdg #max
{
    width: 26px;
    height: 26px;
    border-image: url(:/img/src/img/maximize-active.svg);
}

#titleWdg #max:hover
{
    border-image: url(:/img/src/img/maximize-hover.svg);
}

#titleWdg #min
{
    width: 26px;
    height: 26px;
    border-image: url(:/img/src/img/minimize-active.svg);
}

#titleWdg #min:hover
{
    border-image: url(:/img/src/img/minimize-hover.svg);
}

#titleWdg #close
{
    width: 26px;
    height: 26px;
    border-image: url(:/img/src/img/close-active.svg);
}

#titleWdg #close:hover
{
    border-image: url(:/img/src/img/close-hover.svg);
}

#titleWdg #logo
{
    min-width: 26px;
    height: 26px;
    border-image: url(:/img/YMTC.ico);
}

#titleWdg #title
{
    font: bold 12px;
    color: #FFFFFF;
    qproperty-text: "Working Log Tool v1.0.0";
}
相关推荐
程与留15 小时前
06_Qt 常用数据类型与容器:QString、QList、QVector、QMap 的性能与实现分析
数据结构·qt
zlinear数据采集卡20 小时前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
skr爱码士1 天前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt·系统架构·客户端
MOONICK1 天前
QT的UI开发框架
qt·ui
郝学胜-神的一滴1 天前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
NO12121 天前
python pyqt5調用攝像頭實時顯示
开发语言·python·qt
丰锋ff1 天前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
程与留2 天前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci2 天前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
Littlehero_1212 天前
QT自定义控件之热换站系统(源码开源)
开发语言·qt