QComboBox中⽂字和下拉项居中
让QComboBox⽂字居中,本以为很简单,结果搞了⼀个⼩时左右,记录⼀下。
这个功能其实不太难,如果愿意写⼀些如重写类等⽐较“⿇烦”的步骤,可以容易做到,但明明⼀个看起来简单的功能⾮要搞的这么复杂,有点不太能接受,于是较劲搞了⼀会,觉得还是记录⼀下,防⽌再遇到这个问题。
QComboBox实现⽂字居中,说⽩了就是⾃定义QComboBox,只不过简单⼀些,但思路是⼀样的。
QComboBox⼀共分为四个部分,我们按照要实现的效果逐⼀实现:
1.展⽰当前选中项的部分:可以通过void QComboBox::setLineEdit( *edit)函数,设置⼀个⾃定义的⾏编辑器来替代现有的展⽰控件,这样我们只需要⾃定义这个QLineEdit就可以了。
2.下拉列表:当我们选择项的时候,下拉列表就会展开,可以通过void QComboBox::setView( *itemView)函数,使⽤⼀个View替代现有的下拉列表,这是我们需要去⾃定义或者美化这个view。(注意如果setView函数要使⽤的是Widget⽅便类,那么⾸先需要设置该Widget相关的model,⽰例见下⾯代码)
⽽view的美化,除了Qt⾃⼰提供的QSS特性之外,我们也可以通过设置Delegate的⽅式⾃⼰完成对item的绘制,⾃由度很⾼。
3.右上⾓的下拉框:这部分可以通过QSS设置,即设置QComboBox的⼦控drop-down,这个⼦控件默认处于QComboBox的右边,是个矩形,drop-down内部⼜有⼀个⼦控件down-arrow,专门⽤于绘制下拉按钮,默认位于drop-down的右上⾓。
4.下拉按钮:通过QSS设置QComboBox的⼦控件down-arrow。
思路有了之后,就很简单了,某些QSS即使不太熟悉,也可以⼀些例⼦参考,照猫画虎即可。
下⾯是⽂字居中的代码:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QStringList items;
items << "offline" << "student" << "teacher" << "manager";
QListWidget *listWidget = new QListWidget(this);
for(int i = 0;i < unt();++i)
{
QListWidgetItem *item = new QListWidgetItem(items.at(i));        item->setTextAlignment(Qt::AlignCenter);
listWidget->addItem(item);
}
ui->comboBox->setModel(listWidget->model());
ui->comboBox->setView(listWidget);
QLineEdit *lineEdit = new QLineEdit;
lineEdit->setReadOnly(true);
lineEdit->setAlignment(Qt::AlignCenter);
ui->comboBox->setLineEdit(lineEdit);
ui->comboBox->setStyleSheet("QComboBox {"
"color:black;"
"background-color:white;"
"outline:0px;"
"border:0px;"
"}"
"QComboBox::down-arrow{"
"right:3px;"
"image:url('subscriptLogin.png');"
"}"
"QComboBox:drop-down {"
"outline:0px;"
"border:0px;"
" }"
);borderbox
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。