• 924阅读
  • 4回复

动态下划线标题栏 [复制链接]

上一主题 下一主题
在线cj123sn
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2018-12-28


一直在伸手,惭愧.
代码不多,开发环境 mingw 5.5.1

/*
* .h文件
*/
#include <QWidget>

class QHBoxLayout;
class QLabel;
class QPushButton;
class QPropertyAnimation;

class JSwitchTitle : public QWidget
{
    Q_OBJECT
public:
    explicit JSwitchTitle(QWidget *parent = 0);
    void addTitles(QStringList titles);

signals:

public slots:
    void slotTitleClicked();
private:
    QHBoxLayout* m_pHLayout;
    bool m_bDrawLine = false;
    QRect m_lineNew;
    QRect m_lineOld;
    QLabel* m_pLine;
    QList<QPushButton*> m_btns;
    QPropertyAnimation* m_pLabMv;
};

/*
* cpp文件
*/

#include <QHBoxLayout>
#include <QDebug>
#include <QPropertyAnimation>
#include <QLabel>
#include <QPushButton>

JSwitchTitle::JSwitchTitle(QWidget *parent) : QWidget(parent)
{
    m_pHLayout = new QHBoxLayout(this);
    qDebug()<<"w"<<this->width();
    qDebug()<<"h"<<this->height();
    m_pHLayout->setContentsMargins(20,9,20,9);
    m_pLine = new QLabel(this);
    m_pLine->setStyleSheet("background-color: rgb(55, 174, 254);");
    m_pLine->hide();
    m_pLabMv = new QPropertyAnimation(m_pLine,"geometry");
}

void JSwitchTitle::addTitles(QStringList titles)
{
    foreach(QString title,titles)
    {
        QPushButton* pBtn = new QPushButton(this);
        pBtn->setStyleSheet("QPushButton{color:rgb(68,68,68);font-size:17px;font-family:微软雅黑;border:none}"
                            "QPushButton:hover{color:rgb(40,143,231);}");
        pBtn->setText(title);
        pBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
        connect(pBtn,&QPushButton::clicked,this,&JSwitchTitle::slotTitleClicked);
        m_pHLayout->addWidget(pBtn);
        m_btns.append(pBtn);
    }


}

void JSwitchTitle::slotTitleClicked()
{
    QPushButton* pBtn = dynamic_cast<QPushButton*>(sender());

    QPoint labTopLeft = pBtn->geometry().bottomLeft();

    QSize labSize;
    labSize.setWidth(pBtn->width());
    labSize.setHeight(3);

    m_pLabMv->stop();
    if(!m_pLine->isVisible())
    {
        m_pLine->resize(labSize);
        m_pLine->move(labTopLeft);
        m_lineNew = QRect(labTopLeft,labSize);
        m_lineOld = m_lineNew;
        m_pLine->show();
    }
    else
    {
        m_pLabMv->setDuration(500);
        m_lineNew = QRect(labTopLeft,labSize);
        m_pLabMv->setStartValue(m_lineOld);
        m_pLabMv->setEndValue(m_lineNew);
        m_pLabMv->setEasingCurve(QEasingCurve::OutBounce);  // 缓和曲线风格
        m_pLabMv->start();
        m_lineOld = m_lineNew;
    }
}

在线liudianwu

只看该作者 1楼 发表于: 2018-12-28
这不是雨田哥的那个吗?
专业各种自定义控件编写+UI定制+输入法定制+视频监控+工业控制+仪器仪表+嵌入式linux+各种串口网络通信,童叟无欺,量大从优,欢迎咨询购买定制!你正好需要,我正好专业!QQ:517216493 微信:feiyangqingyun Email:feiyangqingyun@163.com
群号:853086607(Qt交流大会,雨田哥群,不定期上传作品,解答作品中相关问题!) 312125701(QtQML多多指教群) 46679801(Qt开发技术交流群-5000人大群)
在线cj123sn

只看该作者 2楼 发表于: 2018-12-28
回 liudianwu 的帖子
liudianwu:这不是雨田哥的那个吗?[表情]  (2018-12-28 14:44) 

感谢大佬回复
在线qq860930595

只看该作者 3楼 发表于: 01-02
回 cj123sn 的帖子
cj123sn:感谢大佬回复[表情] (2018-12-28 15:01) 

被大佬翻牌了
离线toby520

只看该作者 4楼 发表于: 01-03
QML 做更加酷炫
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
快速回复
限100 字节
 
上一个 下一个