QComboBox样式设置——Qt

前言

我对qss只会一些简单的,所以每次都得查资料,自己调,好麻烦,特别是之前一篇博客关于菜单样式的设置。这次以为两者相似,结果不是的。

这个QComboBox下拉框的样式设置有稍微复杂,有些关键点得记住,所以用这篇博客记录下。

代码和说明

有图有真相,我现在将QComboBox样式表中的部分关键词标出来,更直观一些:

QComboBox常规样式 

图中QComboBox我只圈出了上面一部分,按理说整个都是属于QComboBox,但是直接在此关键词下设置属性只包括这部分,其他的需要分别设置。我这里只设置了边框和字体,其他的看自己情况添加。padding右侧为

QComboBox{
  color:#666666;
  font-size:14px;
  padding: 1px 15px 1px 3px;
  border:1px solid rgba(228,228,228,1);
  border-radius:5px 5px 0px 0px;
} 

 下拉按钮QComboBox::drop-down ,可以设置按钮的位置,大小、背景图,边框等

  QComboBox::drop-down {
      subcontrol-origin: padding;
      subcontrol-position: top right;
      width: 15px;
      border:none;
  }

箭头图标 QComboBox::down-arrow这个很简单就是把自己箭头加进去就行。

  QComboBox::down-arrow {
      image: url(:/res/work/dateDown.png);
  }

下拉列表QComboBox QAbstractItemView,因为QComboBox的view是QAbstractItemView的子类,所以是后代迭代器的写法。

  QComboBox QAbstractItemView{
	background:rgba(255,255,255,1);
    border:1px solid rgba(228,228,228,1);
    border-radius:0px 0px 5px 5px;
	font-size:14px;
    outline: 0px;  
  }

注:下拉项去虚线的写法: outline: 0px; 

下拉项样式的设置和我之前博客说的菜单项的写法不一样的,和列表表格之类的写法是一样的,比较简单,直接设置。

QComboBox QAbstractItemView::item{
	height:36px;
	color:#666666;
	padding-left:9px;
	background-color:#FFFFFF;
}
QComboBox QAbstractItemView::item:hover{ 
  background-color:#409CE1;
  color:#ffffff;
}
QComboBox QAbstractItemView::item:selected{
  background-color:#409CE1;
  color:#ffffff;
}

QComboBox状态样式

下拉框QComboBox还有两种状态编辑editable和展开on,我这边因为不可编,所以就没写编辑状态,只写了展开时通过对padding数值的改变,从而实现的动态变化。

QComboBox:on { 
      padding-top: 3px;
      padding-left: 4px;
  }
  QComboBox::down-arrow:on { 
      top: 1px;
      left: 1px;
  }

总体下来动态图是这样的

注意,最重要的一点就是要使qss生效,在代码中还要加一句:

ui->productBox->setView(new  QListView());

结束语

这篇博客写下来,感觉都没啥要记录的,都太简单了。

  • 77
    点赞
  • 340
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
Qt4中,我们可以使用QComboBox的验证功能来实现输入内容的校验。下面是一个实现的步骤: 1. 创建一个QComboBox对象,例如: QComboBox *comboBox = new QComboBox(parent); 2. 设置输入内容的校验规则,可以使用QRegExpValidator来实现,例如: QRegExpValidator *validator = new QRegExpValidator(QRegExp("[A-Za-z]+"), this); comboBox->setValidator(validator); 上述代码中,使用正则表达式"[A-Za-z]+"来限制输入内容只能是字母。 3. 如果需要更复杂的校验规则,可以使用自定义的QValidator来实现。首先,需要创建一个继承自QValidator的子类,并重写validate()方法,在该方法中实现自定义的校验逻辑。 例如,如果需要限制输入内容只能包含字母和数字,可以创建一个AlphaNumericValidator类如下: ```cpp class AlphaNumericValidator : public QValidator { Q_OBJECT public: AlphaNumericValidator(QObject *parent = nullptr) : QValidator(parent) { } virtual State validate(QString &input, int &pos) const override { QRegExp rx("[A-Za-z0-9]+"); if (rx.exactMatch(input)) return Acceptable; else if (input.isEmpty()) return Intermediate; else return Invalid; } }; ``` 4. 创建AlphaNumericValidator的实例,并将其设置QComboBox的校验器,例如: AlphaNumericValidator *validator = new AlphaNumericValidator(this); comboBox->setValidator(validator); 上述代码将限制输入内容只能是字母和数字。 通过上述步骤,我们就可以在Qt4中实现QComboBox的输入内容校验功能。请注意,Qt4已经过时,推荐使用更新版本的Qt实现类似功能。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值