1.绘制窗体背景
protected:
void paintEvent(QPaintEvent *event) override;
void D1CodeBtnGroup::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPixmap pixmap(":/backgroud1.png");
painter.drawPixmap(this->rect(),pixmap);
}
2.设置按钮字体颜色
QPalette pal;
pal.setColor(QPalette::ButtonText, QColor(0,0,0));
m_pBtns[i]->setPalette(pal);
3.设置Label字体颜色
QPalette pal;
pal.setColor(QPalette::Labelext, QColor(0,0,0));
m_pLabels[i]->setPalette(pal);
//设置字体,加粗常见权重
QFont font ("Microsoft YaHei", 12, 75);
m_titleLabel->setFont(font);
m_titleLabel->setStyleSheet("color:white");//文本颜色
//QFont::Light - 25 高亮
//QFont::Normal - 50 正常
//QFont::DemiBold - 63 半粗体
//QFont::Bold - 75 粗体
//QFont::Black - 87 黑体
4.设置按钮透明及悬浮效果
m_pBtns[i]->setIcon(QPixmap(":/circleBtn.png"));
m_pBtns[i]->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
//m_pBtns[i]->setStyleSheet("background-color:rgba(0,0,0,0)");
m_pBtns[i]->setStyleSheet("QToolButton{background-color:transparent}"
"QToolButton:hover{background-color:rgba(0,197,205,100)}"
"QToolButton:pressed{background-color:rgba(0,134,139,100)}");
m_pBtns[i]->setPalette(pal);
m_pBtns[i]->setFixedWidth(100);
m_pBtns[i]->setAutoRaise(true);
m_pBtns[i]->setText(strList.at(i));
m_pGridLayout->addWidget(m_pBtns[i], 0, i);
6.设置QLabel作为高亮显示
//QLabel, 先设置过滤鼠标事件
m_pCurrentSub->setAttribute(Qt::WA_TransparentForMouseEvents,true);
m_pCurrentMenu->setAttribute(Qt::WA_TransparentForMouseEvents,true);
//QLabel设置父窗体
m_pCurrentSub = new QLabel(m_widgetSubMenu);
m_pCurrentMenu = new QLabel(this);
//QLabel设置半透明底色
m_pCurrentSub->setStyleSheet("QLabel{background-color:rgba(32,78,170,100)}");
m_pCurrentMenu->setStyleSheet("QLabel{background-color:rgba(0,134,139,100)}");
//点击按钮,QLabel高亮在按钮下高亮显示
//注意,Pos获取的是控件在父窗口的位置,需要指定合适的 父窗口
connect(btn, &QToolButton::clicked, [=]()
{
m_pCurrentSub->setGeometry(btn->pos().x(), btn->pos().y(), btn->width(), btn->height());
m_pCurrentSub->setVisible(true);
emit this->sglSubChanged(index);
});
7.实现点击按钮的收缩展示
connect(m_btnMenu, &QToolButton::clicked, [=]()
{
m_pCurrentMenu->setGeometry(m_btnMenu->pos().x(), m_btnMenu->pos().y(), m_btnMenu->width(), m_btnMenu->height());
emit sglMenuChanged(m_id);
if (m_list % 2)
{
m_btnMenu->setIcon(style()->standardIcon(QStyle::SP_ToolBarHorizontalExtensionButton));
m_widgetSubMenu->setVisible(false);
m_pCurrentMenu->setVisible(false);
}
else
{
m_btnMenu->setIcon(style()->standardIcon(QStyle::SP_ToolBarVerticalExtensionButton));
m_widgetSubMenu->setVisible(true);
m_pCurrentMenu->setVisible(true);
}
m_list++;
});
8.切换菜单,更新高亮显示
//切换菜单
connect(pWidget->m_btnMenu, &QToolButton::clicked, [=]()
{
m_pBtnToolBox->m_previousBtn = m_pBtnToolBox->m_currentBtn;
m_pBtnToolBox->m_currentBtn = pWidget;
if((m_pBtnToolBox->m_previousBtn != nullptr) && (m_pBtnToolBox->m_previousBtn != m_pBtnToolBox->m_currentBtn))
{
m_pBtnToolBox->m_previousBtn->m_pCurrentMenu->setVisible(false);
m_pBtnToolBox->m_previousBtn->m_pCurrentSub->setVisible(false);
}
this->m_pMenuStack->setCurrentIndex(iIndex);
this->m_pMenuStack->start(iIndex);
this->m_pMenuStack->setCurrentIndex(iIndex);
});