本文主要是介绍关于Qt的QMainWindow、QTableWidget、QComboBox、QScrollArea的widget导致的qss无效问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
前阵子比较忙,忘记记录这个问题了。事情是我在写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};
这篇关于关于Qt的QMainWindow、QTableWidget、QComboBox、QScrollArea的widget导致的qss无效问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!