Qt修改QMainWindow的标题栏样式

这篇具有很好参考价值的文章主要介绍了Qt修改QMainWindow的标题栏样式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt修改QMainWindow的标题栏样式

  • 自定义标题栏样式

  • 效果图
    qmainwindow设置标题栏颜色,编程,qt,ui,开发语言

  • 代码展示文章来源地址https://www.toymoban.com/news/detail-538523.html

class WidgetBase : public QWidget
{
	Q_OBJECT
public:
	explicit WidgetBase(QWidget *parent = 0);
};

class TitleStyle : public QWidget
{
    Q_OBJECT

public:
    TitleStyle(QWidget *parent = nullptr);
    ~TitleStyle();

	void SetTitleContent(const char* pContent);

public slots:
	void OnMin();
	void OnMax();
	void OnClose();

protected:
	virtual void mouseDoubleClickEvent(QMouseEvent *event);
	virtual void mousePressEvent(QMouseEvent *event);
	virtual bool eventFilter(QObject *obj, QEvent *event);

private:
	void InitSignalSlot();
	void InitSytleSheet();
private:
	Ui::TitleStyleClass ui;
};
#include "TitleStyle.h"
#include <QMouseEvent>
#include <windows.h>

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

	InitSignalSlot();

	InitSytleSheet();
}

TitleStyle::~TitleStyle()
{}


void TitleStyle::SetTitleContent(const char* pContent)
{
	if (pContent)
	{
		ui.lblTitle->setText(QString::fromLocal8Bit(pContent));
	}
}

void TitleStyle::OnMin()
{
	QWidget *pWindow = this->window();
	if (pWindow->isWindow())
	{
		pWindow->showMinimized();
	}
}

void TitleStyle::OnMax()
{
	QWidget *pWindow = this->window();
	if (pWindow->isWindow())
	{
		pWindow->isMaximized() ? pWindow->showNormal() : pWindow->showMaximized();
	}
}

void TitleStyle::OnClose()
{
	QWidget *pWindow = this->window();
	if (pWindow->isWindow())
	{
		pWindow->close();
	}
}

void TitleStyle::mouseDoubleClickEvent(QMouseEvent *event)
{
	Q_UNUSED(event);
	emit ui.btnMax->clicked();
}

void TitleStyle::mousePressEvent(QMouseEvent *event)
{
	if (ReleaseCapture())
	{
		QWidget *pWindow = this->window();
		if (pWindow->isWindow())
		{
			SendMessage(HWND(pWindow->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
		}
	}
	event->ignore();
}

bool TitleStyle::eventFilter(QObject *obj, QEvent *event)
{
	switch (event->type())
	{
	case QEvent::WindowTitleChange:
	{
		QWidget *pWidget = qobject_cast<QWidget *>(obj);
		if (pWidget)
		{
			ui.lblTitle->setText(pWidget->windowTitle());
			return true;
		}
	}
	case QEvent::WindowIconChange:
	{
		QWidget *pWidget = qobject_cast<QWidget *>(obj);
		if (pWidget)
		{
			QIcon icon = pWidget->windowIcon();
			ui.lblIcon->setPixmap(icon.pixmap(ui.lblIcon->size()));
			return true;
		}
	}
	case QEvent::WindowStateChange:
	case QEvent::Resize:
	{
		return true;
	}
	default:
	{
		return false;
	}
	}
	return QWidget::eventFilter(obj, event);
}

void TitleStyle::InitSignalSlot()
{
	connect(ui.btnMin, SIGNAL(clicked()), this, SLOT(OnMin()));
	connect(ui.btnMax, SIGNAL(clicked()), this, SLOT(OnMax()));
	connect(ui.btnClose, SIGNAL(clicked()), this, SLOT(OnClose()));
}

void TitleStyle::InitSytleSheet()
{
	ui.btnMin->setIcon(QIcon(":/image/image/btnMin.png"));
	ui.btnMax->setIcon(QIcon(":/image/image/btnMax.png"));
	ui.btnClose->setIcon(QIcon(":/image/image/btnClose.png"));

	ui.lblIcon->setScaledContents(true);
	ui.lblIcon->setPixmap(QPixmap(":/image/image/lblIcon.png"));
	
	ui.lblTitle->setStyleSheet("color: #FF96DB");

	ui.widget->setStyleSheet("background-color: rgb(85, 170, 0);");
}

WidgetBase::WidgetBase(QWidget *parent /*= 0*/)
{

}
  • 主窗口调用
QtWidgetsApplication6::QtWidgetsApplication6(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	WidgetBase *pTopWindow = new WidgetBase();
	pTopWindow->setWindowFlags(Qt::FramelessWindowHint);

	this->setParent(pTopWindow);
	TitleStyle *pTitleWidget = new TitleStyle(pTopWindow);
	pTitleWidget->SetTitleContent("测试程序");
	pTopWindow->setSizePolicy(this->sizePolicy());
	pTopWindow->setMaximumSize(this->maximumSize());
	pTopWindow->setMaximumSize(this->maximumSize());

	this->installEventFilter(pTitleWidget);
	QGridLayout *pLayout = new QGridLayout();
	pLayout->addWidget(pTitleWidget);
	pLayout->addWidget(this);
	pLayout->setSpacing(0);
	pLayout->setContentsMargins(0, 0, 0, 0);
	pTopWindow->setLayout(pLayout);

	pTopWindow->show();
}
  • 需要自己用Qt Designer创建一个布局界面,如下图:
    qmainwindow设置标题栏颜色,编程,qt,ui,开发语言
  • 标记自己学习

到了这里,关于Qt修改QMainWindow的标题栏样式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qt 系列(二)---qt designer通过设置控件样式表进行背景颜色设置

    1. 前言 一般Layouts不可以进行改变样式表,当我们想修改背景样式表,同时又不改变其他控件的颜色时,可以选择List View 控件改变背景颜色。 2. 设置背景 (1)配置 .qrc 文件 新建mypicture.qrc文件,记事本打开 (2)右键选择项目–添加–现有项,选择建立的.qrc文件,此时,项

    2024年02月06日
    浏览(34)
  • QMainWindow

    QMainWindow是一个为用户提供主窗口程序 的类,包含一个菜单栏(menu bar)、多个工具栏 (tool bars)、多个锚接部件(dock widgets)、―个 状态栏(status bar )及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器、 图片编辑器等。 菜单栏 菜单是一系列命令的列表。为了实现菜

    2024年02月14日
    浏览(21)
  • QMainwindow窗口

    只能有一个, 位于窗口的最上方 关于顶级菜单可以直接在UI窗口中双击, 直接输入文本信息即可, 对应子菜单项也可以通过先双击在输入的方式完成添加, 但是这种方式不支持中文的输入。 输入文字,按回车确认。 能创建二级菜单栏 新建动作( action ) 得到: 将刚刚创建的动作

    2024年02月13日
    浏览(24)
  • Qt Creator设置IDE的字体、颜色、主题样式

        Qt是一款开源的、跨平台的C++开发框架,支持Windows、Linux、Mac系统,从1995发布第一版以来,发展迅猛,最开始是用于Nokia手机的Symbian(塞班)系统和应用程序开发,现在是用于嵌入式软件、桌面软件(比如WPS、VirtualBox)、Android软件等开发,到2023年12月,其最新的版本已经更

    2024年02月04日
    浏览(34)
  • Qt配置设置,修改全文字体大小颜色,背景颜色

    这是完成时的demo,选择所需。 点击确认修改,全局修改,效果第二张图。 在没有点击确认修改时,字体等按钮的改变只会在文本框里面体现出来。点击确认才会修改全局的东西。点击恢复默认时,字体字号颜色控件全部恢复初始状态,当点击确认修改,全局才会改为初始状

    2024年02月11日
    浏览(38)
  • PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)

    QWidget是所有用户界面对象的基类,而QMainWindow 用于创建主应用程序窗口的类。它是 QWidget 的一个子类,提供了创建具有菜单栏、工具栏、状态栏等的主窗口所需的功能。上篇主要介绍了基本使用,创建窗口时都是继承单个模块,本章主要介绍下两个模块的结合使用。 1.我们先

    2024年04月08日
    浏览(65)
  • MATLAB修改字体大小,加粗,字体样式,字体颜色,线形,希腊字母,特殊符号,图片文本位置及字体设置等

    1、修改label的字体大小、格式、加粗、颜色: xlabel(\\\'标题\\\',\\\'FontSize\\\',14,\\\'FontWeight\\\',\\\'bold\\\',\\\'FontName\\\',\\\'Times New Roman\\\',\\\'Color\\\',\\\'r\\\'); 2、标题的旋转:xlabel(\\\'标题\\\',\\\'rotation\\\',22);ylabel(\\\'标题\\\',\\\'rotation\\\',-35); 3、颜色符号以及线形、标记符号 颜色符号 标记符号 b 蓝色 . 点 g 绿色 s 方块 r 红色 o 圆圈

    2024年02月15日
    浏览(46)
  • pyqt5 QMainWindow、Dialog点击关闭弹出是否确定关闭

    1.在QMainWindow()中,重写closeEvent函数实现窗口关闭事件。 2.在Dialog()中,重写closeEvent函数实现窗口关闭事件。  以上述两种情况做演示,其他情况同上。 注意:    在main()方法中可以看到:我们最终显示的是QMainWindow()类创建的窗口对象,如果想要实现关闭窗口触发弹窗提示

    2024年02月15日
    浏览(33)
  • 【Vue】在el-table的el-table-column中,如何控制单行、单列、以及根据内容单独设置样式。例如:修改文字颜色、背景颜色

    用cell-style表属性来实现。在官网中是这样表述这个属性的。    在el-table中用v-bind绑定此属性。(v-bind的简写是:) data中的options数据为: 此时页面显示为:     在methods中声明cellStyle方法。让我们打印出各个参数看一下代表了什么。 控制台打印如下:     其实很好理解,

    2024年02月15日
    浏览(41)
  • 【微信小程序】文章样式,标题样式,及设置背景~

    | background-size  设置背景图片大小。图片可以保有其原有的尺寸,或者拉伸到新的尺寸,或者在保持其原有比例的同时缩放到元素的可用空间的尺寸。 | background-size: cover;适配屏幕大小 文章样式,标题样式,及设置背景~ index.wxml app.wxss index.scss 注意: 微信小程序中不支持直接

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包