问题
前阵子比较忙,忘记记录这个问题了。事情是我在写QTableWidget的qss时候,要把下图红色箭头指向的这个边角样式改变时发现的。我发现我对QTabelCornerButton写样式无效。但是我印象里,很早之前也对这个东西写过qss,我记得是生效的,所以花了点心思研究了下。
发现
煞费心思找到了之前的代码,比对了下并无不同,但是一个qss生效一个无效。所以感觉是QTabelWidget出的问题。以前的QTableWidget是UI Designer直接拉的,而现在的是new出来的。不禁回想起以前的两个坑。
QScrollArea问题以及QMainWindow的qss问题。
分析
Qt里面new的东西和Designer拉的东西是不一样的。拿MainWindow来说,不是设计界面拉出来的是没有centralWidget的。
QScrollArea也是一样,代码生成的也是没有核心的Widget的。QTableWidget也是一样,没有CornerWidget,自然qss无法生效。
所以需要自己手动添加。
pTable->setCornerWidget(new QWidget());
一样的道理,QComboBox要设置下拉框qss的话,是对QAbstractItemView进行设置。比如设置下拉框高度。
QComboBox QAbstractItemView::item{height:40px;}
但是如果不是设计器拉出来,这样写是无效的。因为代码生成的QComboBox里面压根没有view。所以需要自己添加。
pComboBox->setView(new QListView());
其它的Qt控件应该也是一样的道理。
其它方法
当然,上面的QTableWidget不设置Corner也是可以的,之前没发现问题时候,用qApp加载解决了。
qApp->setStyleSheet(QStringLiteral("QTableCornerButton::section{XXX};