qt 按钮互斥效果

void SideBar::setBtnVec(QVector<QPushButton*> btnVec, const char *name)
{
    m_propertyName = name;
    m_btnVec = btnVec;

    for (int i = 0; i < m_btnVec.count(); i++)
    {

        m_scrollLayout->addWidget(m_btnVec.at(i));
        connect(m_btnVec.at(i),&QPushButton::clicked,this,[&](){
           auto * btn =  (QPushButton*)sender();
           qDebug() << "点击侧边栏按钮,切换页: " << btn->property(m_propertyName).toInt();
            emit signalSwitchPage(i);

        });
        connect(m_btnVec.at(i),&QPushButton::clicked,this,[&](){
            // 选择按钮后的背景颜色
            auto * btn =  (QPushButton*)sender();
            btn->setStyleSheet(
                "QPushButton {"
                "    background-color: rgba(153, 152, 156, 100);"  // 背景色
                "    color: white;"                // 字体颜色
                "    border-radius: 5px;"           //边框圆角
                "    padding: 5px 10px;"           //内边距
                "}"
            );
            // 互斥效果
            for (int i = 0; i < m_btnVec.count(); i++)
            {
                if (m_btnVec.at(i) != btn)
                {
                    m_btnVec.at(i)->setStyleSheet(
                        "QPushButton {"
                        "    background-color: rgba(0,0,0,0);"  // 背景色
                        "    color: white;"                // 字体颜色
                        //"    border: 2px solid #4CAF50;"    边框颜色和宽度
                        "    border-radius: 5px;"           //边框圆角
                        "    padding: 5px 10px;"           //内边距
                        //"    font-size: 16px;"              字体大小
                        "}"
                        "QPushButton:hover {"
                        "    background-color: rgba(210, 209, 211, 100);"  // 鼠标悬停时背景色
                        "    border-radius: 5px;"           //边框圆角
                        "}"
                        "QPushButton:pressed {"
                        "    background-color: rgba(153, 152, 156, 100);"  // 按下时背景色
                        "    border-radius: 5px;"           //边框圆角
                        "}"
                    );
                }
            }
        });

        // 设置按钮的样式
        m_btnVec.at(i)->setStyleSheet(
            "QPushButton {"
            "    background-color: rgba(0,0,0,0);"  // 背景色
            "    color: white;"                // 字体颜色
            //"    border: 2px solid #4CAF50;"    边框颜色和宽度
            "    border-radius: 5px;"           //边框圆角
            "    padding: 5px 10px;"           //内边距
            //"    font-size: 16px;"              字体大小
            "}"
            "QPushButton:hover {"
            "    background-color: rgba(210, 209, 211, 100);"  // 鼠标悬停时背景色
            "    border-radius: 5px;"           //边框圆角
            "}"
            "QPushButton:pressed {"
            "    background-color: rgba(153, 152, 156, 100);"  // 按下时背景色
            "    border-radius: 5px;"           //边框圆角
            "}"
        );
    }
    // 给布局添加弹簧
    m_scrollLayout->addStretch(0);

    // 将布局添加到侧边栏主控件中
    m_contentWidget->setLayout(m_scrollLayout);

    // 将中央主控件添加到滚动区域窗口中
    m_scrollArea->setWidget(m_contentWidget);
}

 

 

 

 

posted @ 2025-02-12 10:32  雾枫  阅读(63)  评论(0)    收藏  举报