QComboBox⾃定义样式(重载下拉框)综合⽤法
⾸先重载QComboBox,因为想保持下拉框与QComboBox控件间隔,就需要重载QComboBox的showPopup。
void vComboBox::showPopup()
{
emit sigPopup();
QComboBox::showPopup();
QWidget *popup = this->findChild<QFrame*>();
popup->move(popup->x(), popup->y() + 4);
}
接下来设置QComboBox qss样式。
//QComboBox本⾝样式
#comboBox
{
font-family: 微软雅⿊;
font-size: 12px;
color:#0078FF;
border-color:#C8C8C8;
border-style:solid;
border-width: 0.5 0.5 0.5 0.5;
border-radius: 14px;
padding-left: 12px;
}
//QComboBox下拉按钮
#comboBox::drop-down
{
margin-right: 10px;
border: none;
}
#comboBox::down-arrow
{
width:16px;
height:16px;
border-image:url(:/ToolTip/qrc/ic_gengduo.png);
}
//QComboBox下拉框样式
#comboBox QAbstractItemView
{
font-family: 微软雅⿊;
font-size: 12px;
border:1px solid rgba(0,0,0,10%);
border-radius: 14px;
padding:5px;
background-color: #FFFFFF;
}
#comboBox QAbstractItemView::item
{
height: 36px;
}
//QComboBox下拉框选中样式
#comboBox QAbstractItemView::item:selected
{
background:rgba(0,0,0,3%);
color:#000000;
}
设置QComboBox样式后,所有关于下拉框样式⽣效需要QComboBox重新设置下拉框控件类。
QListView *ListView = new QListView;
uiboBox->setView(ListView);
设置下拉框滑动条样式。
QFile file("scrollbar.qss");
if (true == file.open(QIODevice::ReadOnly))
{
borderboxQString strStyle = adAll();
ListView->verticalScrollBar()->setStyleSheet(strStyle);
}
ListView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
设置下拉框当前页显⽰item个数。
uiboBox->setMaxVisibleItems(4);
设置QComboBox可编辑。
uiboBox->setEditable(true);
设置QComboBox与其下拉框⽂本居中。
QLineEdit *lineEdit = new QLineEdit;
lineEdit->setAlignment(Qt::AlignCenter);
uiboBox->setLineEdit(lineEdit);
uiboBox->lineEdit()->setAlignment(Qt::AlignCenter);
for (int i = 0; i < uiboBox->count(); ++i) {
uiboBox->setItemData(i, Qt::AlignCenter, Qt::TextAlignmentRole);
}
下拉框设置圆⾓样式后,边⾓会存在阴影问题,这是Popup问题导致的,解决办法可以通过解决Popup来解决,也可以通过设置QComboBox本⾝属性。
uiboBox->view()->window()->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
uiboBox->view()->window()->setAttribute(Qt::WA_TranslucentBackground);
最后关于选中某个item需要设置某种样式可以通过信号与槽解决。
currentIndexChanged
currentTextChanged
QComboBox设置editable出现QLineEdit⽆法圆⾓问题
设置左右padding即可
QComboBox{
padding-left:24px;
padding-right:24px;
}
修改按钮显⽰⽅位(top,bottom,left,right,center)
默认center
QComboBox::drop-down{
subcontrol-origin: padding;
subcontrol-position: right;
}
修改按钮点击位置(top,bottom,left,right)
QComboBox::drop-down{
right: 24px;
}
QComboBox按钮点击(出下拉框)按钮样式变换
QComboBox::down-arrow:on
{
width:12px;
height:12px;
border-image: url(:/Login/qrc/universal/ico_sl.png);
}
QComboBox::down-arrow
{
width:12px;
height:12px;
border-image: url(:/Login/qrc/universal/ico_xia.png);
}
效果图如下:
关于阴影问题
设置圆⾓的QCOmboBox下拉框在点击出现的那⼀瞬间会出现阴影,可以通过取消UI动画来解决该问题
QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false);
此⽅法会禁⽌QCOmboBox下拉动作,如果想不禁⽤也取消下拉出现的阴影,就需要修改动画的圆⾓,可以通过QGraphicsDropShadowEffect实现
关于QCOmboBox下拉框item新增图⽚以及各种按钮控件
⼤体思路就是⾃⼰封装⼀个QListWidget,利⽤QListWidget的model/view机制,封装⼀个窗⼝类,在
该窗⼝类中新增图⽚按钮等控件,然后把该窗⼝当成item项,添加到前⾯封装的QListWidget类中,中间⽤到了QListWidgetItem类。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论