2016-10-17 47 views
1

当我改变它的下拉菜单上的应用,以及(所有项目)我QComboBox comboBox->setFont(whateverQFont);的字体,它会覆盖我已经在我的项目设置与comboBox->setItemData(index, itemSpecificFont, Qt::FontRole);如何仅更改qcombobox标签/标题的字体?

我想了Qt :: FontRole数据如仅在QComboBox标签上设置字体,并保持原样显示下拉菜单。甚至更好:直接使用与所选项目相同的字体。有没有简单的方法来做到这一点?

如果不是,我想我需要实现一个自定义模型来管理每个项目和标题的不同字体角色?

Thx任何提示!

+0

我已经能够达到我想要在内线的功能,通过检索CURRENTDATA -fontRole并将该字体应用于画家。虽然它需要复制/粘贴QComboBox绘制代码以在子类中修改它...如果任何人有更简洁明了的方式来解决我的问题,请告诉我! – ymoreau

+0

不知道我是否理解这个问题,但为什么不能使用CSS https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox? – agilob

+0

@agilob我希望组合框的标签部分显示与所选项目相同的样式,因此取决于项目。该项目的风格是由代码定义的,我没有看到任何方式使用CSS将其传播到cbb标签。 – ymoreau

回答

0

在开始实现自定义模型之前,您可以尝试使用QListView。 它只适用于下拉菜单,您可以使用通常的setFont函数更改其字体;您必须将其应用到您的QComboBox,例程setView

像这样的东西(它不是Qt的C++代码,我已经跳过函数调用的所有参数):

QComboBox *combobox = new QComboBox(); 
combobox->setFont(); 
... 
QListView *listview = new QListView(); 
listview->setFont(); 

combobox->setView(listview); 
+0

我的问题是我在列表视图中有不同的字体,默认的字体处理得很好。我只想将选定项目的字体应用到组合框标签部分,这更像是标签视图对象比列表视图对象的更改(但不能在QComboBox类以外访问)。 – ymoreau

+0

哦,是的,对不起,我误解了你的问题。您可以使用QComboBox信号'currentIndexChanged(int index)',将其与您使用所选项目索引(作为参数传递)的自定义插槽连接,以使用函数'itemData(...)'检索字体信息,将字体应用于QComboBox,以便下拉菜单字体保持不变,但组合框标签字体根据所选项目更改 – Andre

+0

正如我在问题中所述,我尝试过这样做,但它不起作用,因为listview(组合框的子组件)使用适用于所有项目的QComboBox的字体。 – ymoreau