1 基本设置

1.0 设置大小

QPushButton *TiBar_pMinimizeBtn = nullptr;
TiBar_pMinimizeBtn = new QPushButton;

 

 设置BUTTON及ICON大小

	TiBar_pMinimizeBtn->setFixedSize(32, 32);
	TiBar_pMinimizeBtn->setIconSize(TiBar_pMinimizeBtn->size());

 

1.2  设置系统ICON

 

#include <qstyle.h>

TiBar_pMinimizeBtn->setIcon(style()->standardIcon(QStyle::SP_TitleBarMinButton));

  提供的系统ICON有


    enum StandardPixmap {
        SP_TitleBarMenuButton,
        SP_TitleBarMinButton,
        SP_TitleBarMaxButton,
        SP_TitleBarCloseButton,
        SP_TitleBarNormalButton,
        SP_TitleBarShadeButton,
        SP_TitleBarUnshadeButton,
        SP_TitleBarContextHelpButton,
        SP_DockWidgetCloseButton,
        SP_MessageBoxInformation,
        SP_MessageBoxWarning,
        SP_MessageBoxCritical,
        SP_MessageBoxQuestion,
        SP_DesktopIcon,
        SP_TrashIcon,
        SP_ComputerIcon,
        SP_DriveFDIcon,
        SP_DriveHDIcon,
        SP_DriveCDIcon,
        SP_DriveDVDIcon,
        SP_DriveNetIcon,
        SP_DirOpenIcon,
        SP_DirClosedIcon,
        SP_DirLinkIcon,
        SP_DirLinkOpenIcon,
        SP_FileIcon,
        SP_FileLinkIcon,
        SP_ToolBarHorizontalExtensionButton,
        SP_ToolBarVerticalExtensionButton,
        SP_FileDialogStart,
        SP_FileDialogEnd,
        SP_FileDialogToParent,
        SP_FileDialogNewFolder,
        SP_FileDialogDetailedView,
        SP_FileDialogInfoView,
        SP_FileDialogContentsView,
        SP_FileDialogListView,
        SP_FileDialogBack,
        SP_DirIcon,
        SP_DialogOkButton,
        SP_DialogCancelButton,
        SP_DialogHelpButton,
        SP_DialogOpenButton,
        SP_DialogSaveButton,
        SP_DialogCloseButton,
        SP_DialogApplyButton,
        SP_DialogResetButton,
        SP_DialogDiscardButton,
        SP_DialogYesButton,
        SP_DialogNoButton,
        SP_ArrowUp,
        SP_ArrowDown,
        SP_ArrowLeft,
        SP_ArrowRight,
        SP_ArrowBack,
        SP_ArrowForward,
        SP_DirHomeIcon,
        SP_CommandLink,
        SP_VistaShield,
        SP_BrowserReload,
        SP_BrowserStop,
        SP_MediaPlay,
        SP_MediaStop,
        SP_MediaPause,
        SP_MediaSkipForward,
        SP_MediaSkipBackward,
        SP_MediaSeekForward,
        SP_MediaSeekBackward,
        SP_MediaVolume,
        SP_MediaVolumeMuted,
        SP_LineEditClearButton,
        // do not add any values below/greater than this
        SP_CustomBase = 0xf0000000
    };

 

 

1.3 设置资源中ICON

	TiBar_pMinimizeBtn->setIcon(QIcon(":/title/images/title/my_btn_min_white_n.png"));

 

 

1.4  设置样式

 1.4.1 使用setStyleSheet设置

	TiBar_pMinimizeBtn->setStyleSheet("border:none;background-color:transparent;");

1.4.2 使用QSS设置

1) 首先,为这个按钮设置定位属性

	TiBar_pMinimizeBtn->setProperty("minimizeProperty", "true");

2)QSS中样式


* [minimizeProperty="true"] {
    border:none;
    background-color:transparent;
}

* [minimizeProperty="true"]:hover {
    border:none;
    background-color:  rgb(88,87,88);

}

 

1.5 加入布局中

	QHBoxLayout *pLayout = new QHBoxLayout(this);
	pLayout->addWidget(TiBar_pIconLabel);
	pLayout->addWidget(TiBar_pTitleLabel);
	pLayout->addWidget(TiBar_pMinimizeBtn);
	pLayout->addWidget(TiBar_pMaximizeBtn);
	pLayout->addWidget(TiBar_pCloseBtn);
	pLayout->setSpacing(10);
	pLayout->setContentsMargins(10, 5, 10, 5);  整个布局的边距

 

1.6 添加响应事件

	connect(TiBar_pMinimizeBtn, SIGNAL(clicked()), this, SLOT(on_TitleBar_Clicked()));

 

2 更改Horver 状态时背景和图标

 

 2.1 Horver时改变背景

  如果只是改变背景,使用样式就可

	TiBar_pMinimizeBtn->setStyleSheet("QPushButton{background-color:rgb(0,0,0);\
		color:white; border-radius:10px; border:2px groove gray;\
		border - style: outset;}"
		"QPushButton:hover{background-color:rgb(255,255,255);color: black;}"	
		"QPushButton:pressed{background-color:rgb(85, 170, 255);\
         border - style: inset; }"
		);

 

 或直接QSS样式

* [minimizeProperty="true"] {
    border:none;
    background-color:transparent;
}

* [minimizeProperty="true"]:hover {
    border:none;
    background-color: rgb(255,0,0);

}

 

 本来想着通过设置  qproperty-icon: url(:/1.png);  改变Horver图标,结果发现,使用上述两种方式都不能实现图标的改变

 2.2 Horver时更改图标

2.2.1 给按钮添加事件过滤器

	TiBar_pCloseBtn->installEventFilter(this);

2.2.2 重写事件过滤函数 eventFilter

	virtual bool eventFilter(QObject *obj, QEvent *event);



bool MyTitleBar::eventFilter(QObject *obj, QEvent *event)
{

	switch (event->type())
	{

	case QEvent::HoverEnter:
	{

		if (obj == TiBar_pMinimizeBtn)
			TiBar_pMinimizeBtn->setIcon(QIcon(":/title/images/title/my_btn_min_white_h.png"));

		break;
	}

	case QEvent::HoverLeave:
	{
		if (obj == TiBar_pMinimizeBtn)
			TiBar_pMinimizeBtn->setIcon(QIcon(":/title/images/title/my_btn_min_white_n.png"));

		break;
	}



	default:
		return false;

	}
	return QWidget::eventFilter(obj, event);
}

 

 

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐