QT开发之QPushButton和QComboBox下拉框美化

1、QPushButton

QMenu *pMenu = new QMenu(this);
    QAction *action1[2];

    QString add[2] = {"Firmware Updates","Software Updates"};//显示项


    for(int i = 0; i < 2; i++)
    {
        action1[i] = pMenu->addAction(add[i]);
        action1[i]->setCheckable(false);
    }

ui->pushButton->setMenu(pMenu);//按钮添加菜单


//菜单背景透明
pMenu->setWindowFlags(pMenu->windowFlags() | Qt::FramelessWindowHint);
pMenu->setAttribute(Qt::WA_TranslucentBackground);


//菜单去掉阴影(因为在设置圆角时如果自带阴影还是会变为直角)
pMenu->setWindowFlag(Qt::NoDropShadowWindowHint);


//菜单QSS
QString menuQss = "QMenu{color:rgb(255, 255, 255);background:rgba(255,255,255,16);border:none;font:16px \"SimHei\";"
                       "border-radius: 10px;"
                       "border-image: url(:/png/86.png);"
                       "padding-top:10px;}";//菜单背景为圆角图片
         menuQss.append("QMenu::item{color:rgb(123,123,123);background:rgba(0, 0, 0,0);height:26px;padding-left:10px;padding-right:10px;"
                        "border-image: url(:/png/86.png);} ");//因为背景透明,所以需要加一个背景才能显示后面的悬浮图片
         menuQss.append("QMenu::Item:selected{color:rgb(255, 255, 255);border-image: url(:/png/85.png);}");//鼠标悬浮
         pMenu->setStyleSheet(menuQss);

效果:

 

 

2、QComboBox

ui->comboBox_language->setView(new QListView());//必须有这句,后面设置itme才有效
ui->comboBox_language->setFont(font);//设置字体

//去掉下拉框阴影
ui->comboBox_language->view()->window()->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
ui->comboBox_language->view()->window()->setAttribute(Qt::WA_TranslucentBackground);




在QSS文件中设置:

/* 未下拉时,QComboBox的样式 */
QComboBox {
    border: 1px solid gray;   /* 边框 */
    border-radius:2px;   /* 圆角 */
    padding: 0px 0px 0px 10px; /* 上内边距、右内边距、下内边距、左内边距 */
    color: rgba(51,51,51,1);
    /*font: normal normal 15px "Microsoft YaHei";*/
    background: transparent;
    text-align: AlignHCenter;

    color:rgb(123,123,123);/*字体颜色*/
    background-color: transparent;
    border-image: url(:/png/60.png);/*背景图片,圆角*/
}

/* 下拉后,整个下拉窗体样式 */
QComboBox QAbstractItemView {
    outline: 0px solid gray;   /* 选定项的虚框 */
    border-radius:10px;   /* 圆角 */
    padding-top:10px;    /*上下都留10px,是因为选中项是矩形,如果不留,移动到第一项和最后一项会变为直角,不好看*/
    padding-bottom:10px;

    color:rgb(123,123,123);
    border-image: url(:/png/84.png);/*下拉框背景,圆角图片*/
}

/* 下拉后,整个下拉窗体每项的样式 */
QComboBox QAbstractItemView::item {

    min-height: 26px;/*每项高度*/
}

/* 下拉后,整个下拉窗体越过每项的样式 */
QComboBox QAbstractItemView::item:hover {
    color:rgb(255,255,255);
}

/* 下拉后,整个下拉窗体被选择的每项的样式 */
QComboBox QAbstractItemView::item:selected {
    color:rgb(255,255,255);

    border-image: url(:/png/85.png);/*鼠标悬浮时背景图片*/
}

效果:

 

qApp->setEffectEnabled(Qt::UI_AnimateCombo, false);//去掉弹窗动画

PS:还有一点小问题,就是在弹出时(没有完全弹出时)下拉框会带直角,我的解决办法是直接去掉弹窗动画,就可以了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值