QT QComboBox的定制,包括下拉菜单

来源:互联网 发布:计算机二级知乎 编辑:程序博客网 时间:2024/06/05 07:15

QCombox本身样式可以使用样式表定制,例如:

QComboBox#pcdevicecombo{
    border: 2px solid #323232;
    background: #0F0F0F;
    color: #C4C4C4;
}
QComboBox#pcdevicecombo::drop-down{
    background: #323232;
    width:26px;
}
QComboBox#pcdevicecombo::down-arrow {
     image: url();
}

关于QCombox的下拉菜单说明文档中的做法:

QComboBoxQAbstractItemView {

      border: 2px solid darkgray;
      selection-background-color: lightgray;
  }

但经过试验发现下拉菜单起不到作用,如何定制呢

QListWidget *list_widget = new QListWidget();
list_widget->setObjectName("pccombox");
m_pEditCombo->setModel(list_widget->model());
m_pEditCombo->setView(list_widget);

新建一个QListWidget,使用这个listWidget作为QComboBox的View,设置listWidget的样式,就改变了QComboBox的样式,QComboBox还是按照之前那样使用,添加item的方式也不变,但如果需要定制复杂样式,可以使用QListWidget添加自定义Widget实现复杂的QComboBox下拉样式。


这是上例中QListWidgte的样式:

QListView#pccombox{
   border: 0px;
}
QListView#pccombox::item{
   height:36px;
   background: #131313;
   color: #999999;
}
QListView#pccombox::item:hover{
   background: #323232;
}

如此设置之后效果99%,但你会发现,下拉菜单hover项会有一圈虚线框,通过 list_widget->setEditTriggers(QAbstractItemView::NoEditTriggers);
list_widget->setFocusPolicy(Qt::NoFocus); 还是不能解决,方法就是在 QListWidget样式中加入

outline:0px;

最终结果

QListView#pccombox{
   border: 0px;
   outline:0px;
}
效果100%


0 0
原创粉丝点击