QT学习记录5(QCombobox滚动条)

好长一段时间没发博客了

最近在做的QT项目中,下拉框(QCombobox)的选项比较多,但发现,点击下拉框之后,会显示出一部分(10条,这个可以调整。大家应该都知道)剩下的鼠标滚轮滚动可以查看,但没有滚动条,容易带来误会。查了一些资料,没找到有哪一篇帖子是完全契合需求的,所以整理一下。

首先是效果图

展开前:

展开后(截图时窗口靠下。所以是向上弹出的,但滚动条是有的)

实现这样的效果并没有用到重写等操作。仅需要CSS和一些设置代码即可。

步骤1:首先,QCombobox要设置列表项的样式,直接对QCombobox写QSS是不行的(个人意见,没有对这个进行深层次的了解),一般都会用到下面这句代码,对QCombobox进行定制,可以看到,这里定制使用的是QListView

//这里的com_clock是我的 QCombobox的控件名
ui->com_clock->setView(new QListView);

步骤2:使用QSS改变样式,实现一些交互效果

加上样式表(注意,这里的样式表,只是为了实现我的灰色风格,和滚动条没有关系,如果对这个不感兴趣的,可以跳过这个代码片)

/***************   QComboBox  ******************/

QComboBox{
    border-left: 1px solid rgb(195,195,195);
    border-right: 1px solid rgb(195,195,195);
   background: rgb(50,50,50);
    color:white;
    selection-background-color:rgb(80,52,158);
    combobox-popup: 0;
}
QComboBox:editable{
    color:white;
    font:20px;
}
QComboBox:enabled{
    border: 1px solid rgba(195,195,195,0);
    selection-background-color:rgb(80,52,158);
}
QComboBox QAbstractItemView{ /*下拉框的显示框效果*/
    border:1px solid rgb(195,195,195);
    border:2px;
}
QComboBox::item:hover{
    background-color:rgb(195,195,195);
}

QComboBox::drop-down {
    subcontrol-origin: padding;
    subcontrol-position: center right;
    width: 15px;
    height:15px;
    padding:5px;
    border-radius:3px;
    border-right-color: rgb(195,195,195);
    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,
    stop:0 rgba(255,255, 255, 155), stop:0.3 rgba(160,160,164,155),
    stop:0.7 rgba(160,160,164,155), stop:1 rgba(255,255, 255, 155));
}
QComboBox::down-arrow {
    image: url(":/image/spectrum/downArrow.png");
    width: 15px;
    height:15px;
    border-radius:5px;


}
QComboBox::down-arrow:hover{
    border-image: url(":/image/spectrum/downArrow.png");
    width: 15px;
    height:15px;
    border-radius:5px;
}
QComboBox::down-arrow:on {
    top: 0px;
    left: 0px;
}

/**************   QComboBox 定制 ****************/
QComboBox QAbstractItemView
{
    padding:5px;
    background:rgb(51,51,51);
}
QComboBox QAbstractItemView::item
{
    margin:1px 0;
    padding:5px;
    font-size:15px;
    background:rgb(60,60,60);
    color:#fff;
    font-family:"Microsoft YaHei";
}
QComboBox QAbstractItemView::item:hover
{
    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,
    stop:0 rgba(127,127, 127, 255), stop:0.3 rgba(106,106,106,255),
    stop:0.7 rgba(82,82,82,255), stop:1 rgba(82,82, 82, 255));
    border-radius:2px;
}

QComboBox QAbstractItemView::item:selected
{
    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,
    stop:0 rgba(127,127, 127, 255), stop:0.3 rgba(106,106,106,255),
    stop:0.7 rgba(82,82,82,255), stop:1 rgba(82,82, 82, 255));
    border-radius:2px;
}

到了这一步之后,应该会得到一个类似这样的下拉框,不要急,一步一步来

再加入这样一段代码:

//设置滚动条的重点在这
ui->com_clock->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

然后再运行一次(确保选择项大于10,或者修改QCombobox的 maxVisibleItems = x   x为整数)

这次应该就有滚动条了,效果是这样的(我设置了maxVisibleItems = 5)

OK,滚动条有是有了,但有点难看,继续用QSS美化

加上滚动条美化QSS

/******** combobox 滚动条  *********/
QComboBox QScrollBar::vertical{ /*主体部分*/
    width:10px;
    background:rgb(89,89,89);
    border:none;
    border-radius:5px;
}
QComboBox QScrollBar::handle::vertical{ /*滑块主体*/
    border-radius:5px;
    width: 10px;
    background:rgb(173,173,173);
}
QComboBox QScrollBar::handle::vertical::hover{
    background:rgb(232,232,232);
}
QComboBox QScrollBar::add-line::vertical{/*上箭头*/
    border:none;
}
QComboBox QScrollBar::sub-line::vertical{/*下箭头*/
    border:none;
}

结果和最初的截图一致了

 

截图没有控制好,可能对比不是很好,见谅

参考博客:https://blog.csdn.net/Zzhouzhou237/article/details/73613278

参考博客:还参考了另一篇博客,是讲的下拉框委托的,突然找不到了,等找到了再修改

 

  • 22
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
QComboBox滚动条样式可以通过修改QScrollBar的样式来实现。在QSS中,可以使用QComboBox QScrollBar::vertical来选择垂直滚动条,并使用不同的属性来修改其外观。例如,可以使用background属性来设置滚动条的背景颜色,border-radius属性来设置滚动条的圆角,width属性来设置滚动条的宽度等。同时,还可以使用QComboBox QScrollBar::handle::vertical来选择滑块的样式,使用QComboBox QScrollBar::add-line::vertical和QComboBox QScrollBar::sub-line::vertical来选择上箭头和下箭头的样式。通过修改这些属性,可以实现自定义的滚动条样式。\[1\] \[2\] #### 引用[.reference_title] - *1* *3* [QT学习记录5(QCombobox滚动条)](https://blog.csdn.net/zh15237774494/article/details/88855289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [QSS QComboBox自定义样式,且自定义滚动条。](https://blog.csdn.net/weixin_43246170/article/details/118160365)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值