关于QComboBox你不知道的那些事!

时间:2022-11-02 19:37:15
关于QComboBox的基本应用、代理设置已经讲过,也足以应对QComboBox的应用,使用QComboBox,往往需要可编辑(combo_box->setEditable(true)),当然美化环节必不可少,细心的人也许会发现一些问题!今天在这里再次吐槽,关于QComboBox你不知道的那些事!

    设置样式:
QComboBox{
border-radius:2px;
border:1px solid gray;
}
QComboBox:hover{
border-radius: 3px;
border-width:2px;
border-color:rgb(50, 180, 250);
}
QComboBox::down-arrow{
image:url(:/login/arrow_down);
}
QComboBox::drop-down{
width:20px;
border-left:1px solid gray;
background:transparent;
}
QComboBox::drop-down:hover{
border-left:1px solid lightgray;
background:rgb(220, 240, 250);
}

    使用combo_box->setEditable(true)之前:
normal:
关于QComboBox你不知道的那些事!
hover:
关于QComboBox你不知道的那些事!


    使用combo_box->setEditable(true)之后:
normal:
关于QComboBox你不知道的那些事!
hover:
关于QComboBox你不知道的那些事!

    好的,再看这段代码:
QComboBox:hover{
border-radius: 3px;
border-width:2px;
border-color:rgb(50, 180, 250);
}
    既然,鼠标滑过QComboBox的边框宽度变为2px,那么为什么只有右边下拉按钮部分变为2px,左边却为1px。想来想去,是不是很不符合常理!再仔细想想,样式的变化是由combo_box->setEditable(true)的出现引起的,那么,这句话的影响的本质是什么呢?

    不妨加上这段代码试试:
combo_box->lineEdit()->setStyleSheet("border:1px solid red;");
    效果如下:
关于QComboBox你不知道的那些事!

    那么,如何做到可编辑又不影响效果呢?
    分析:既然QComboBox可编辑之后,QComboBox的边框只有1px,那么另外的1px,则可由 combo_box->lineEdit()来弥补!添加 combo_box->lineEdit()->setStyleSheet("margin:1px; border:0px;")即可。
关于QComboBox你不知道的那些事!
    总结:当使用 combo_box->setEditable(true)之后,QLineEdit被激活,既然被激活那么也注定 combo_box->lineEdit() 拥有QLineEdit的一切,为什么呢?因为 combo_box->lineEdit()原本就是QLineEdit ,不多解释!相应的QComboBox的样式也会受到相应的影响,当然解决问题的过程才是最美好的。。。
    
   上面的分析主要是了解QComboBox的机制原理。。。更简单的办法是通过使用padding来解决问题:
QComboBox{
    border-radius:2px;
    border:1px solid  gray
    padding:2px;   
}

注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。