Qt 如何仅更改qcombobox标签/标题的字体?
当我更改QComboBoxQt 如何仅更改qcombobox标签/标题的字体?,qt,qcombobox,Qt,Qcombobox,当我更改QComboBoxcomboBox->setFont(whateverQFont)的字体时它也应用于下拉菜单(所有项目),它覆盖了我用comboBox->setItemData(索引、itemSpecificFont、Qt::FontRole)在我的项目上设置的Qt::FontRole数据 我只想在QComboBox标签上设置字体,让下拉列表保持原样显示。或者更好:直接使用与所选项目相同的字体。 有没有一个简单的方法 编辑:Jasonhan的解决方案适用于可编辑的QComboBox(->
comboBox->setFont(whateverQFont)的字体时代码>它也应用于下拉菜单(所有项目),它覆盖了我用comboBox->setItemData(索引、itemSpecificFont、Qt::FontRole)在我的项目上设置的Qt::FontRole数据代码>
我只想在QComboBox标签上设置字体,让下拉列表保持原样显示。或者更好:直接使用与所选项目相同的字体。
有没有一个简单的方法
编辑:Jasonhan的解决方案适用于可编辑的QComboBox(->在QLineEdit上设置字体),但不适用于常规的QComboBox,因为QLabel是私有的。在开始实施自定义模型之前,您可以尝试使用QListView。
它只适用于下拉菜单,您可以使用常用的setFont功能更改其字体;您必须将其应用于QComboBox Through例程设置视图
类似这样的事情(它不是Qt C++代码,我跳过函数调用中的所有参数):
在开始实现自定义模型之前,可以尝试使用QListView。
它只适用于下拉菜单,您可以使用常用的setFont功能更改其字体;您必须将其应用于QComboBox Through例程设置视图
类似这样的事情(它不是Qt C++代码,我跳过函数调用中的所有参数):
两年后,我看到了这个问题。我不知道你是否找到了更好的方法。如果不是,下面的代码可能会给您一个提示
QComboBox
标签正如您所说,实际上是一个QLineEdit
,因此您只需设置此组件的字体,它就能解决您的问题
QComboBox *box = new QComboBox();
//add some list items to box
if (box->lineEdit())
box->lineEdit()->setFont(font);//font is your desirable font
两年后,我看到了这个问题。我不知道你是否找到了更好的方法。如果不是,下面的代码可能会给您一个提示
QComboBox
标签正如您所说,实际上是一个QLineEdit
,因此您只需设置此组件的字体,它就能解决您的问题
QComboBox *box = new QComboBox();
//add some list items to box
if (box->lineEdit())
box->lineEdit()->setFont(font);//font is your desirable font
对于不可编辑的QComboxBox,需要安装一个QProxyStyle,在绘制CE_ComboxLabel控件元素时设置字体
下面是一个将标签字体设置为斜体的示例:
#include <QApplication>
#include <QProxyStyle>
#include <QPainter>
#include <QComboBox>
class MyProxyStyle : public QProxyStyle
{
public:
void drawControl(QStyle::ControlElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget = nullptr) const override
{
if (element == QStyle::CE_ComboBoxLabel)
{
auto fnt = painter->font();
fnt.setItalic(true);
painter->setFont(fnt);
}
QProxyStyle::drawControl(element, option, painter, widget);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
app.setStyle(new MyProxyStyle);
QComboBox cb;
cb.addItem("Option 1");
cb.addItem("Option 2");
cb.addItem("Option 3");
cb.show();
app.exec();
}
#包括
#包括
#包括
#包括
类MyProxyStyle:公共QProxyStyle
{
公众:
void drawControl(QStyle::ControlElement元素,常量QStyleOption*选项,
QPainter*painter,const QWidget*widget=nullptr)const覆盖
{
if(元素==QStyle::CE_ComboBoxLabel)
{
自动fnt=画师->字体();
fnt.setItalic(真);
画师->设置字体(fnt);
}
QProxyStyle::drawControl(元素、选项、画师、小部件);
}
};
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
应用程序设置样式(新MyProxyStyle);
QCOMBOX cb;
cb.补充条款(“选项1”);
cb.补充条款(“选项2”);
cb.补充条款(“选项3”);
cb.show();
app.exec();
}
对于不可编辑的QComboxBox有效的方法是安装一个QProxyStyle,在绘制CE_ComboxLabel控件元素时设置字体
下面是一个将标签字体设置为斜体的示例:
#include <QApplication>
#include <QProxyStyle>
#include <QPainter>
#include <QComboBox>
class MyProxyStyle : public QProxyStyle
{
public:
void drawControl(QStyle::ControlElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget = nullptr) const override
{
if (element == QStyle::CE_ComboBoxLabel)
{
auto fnt = painter->font();
fnt.setItalic(true);
painter->setFont(fnt);
}
QProxyStyle::drawControl(element, option, painter, widget);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
app.setStyle(new MyProxyStyle);
QComboBox cb;
cb.addItem("Option 1");
cb.addItem("Option 2");
cb.addItem("Option 3");
cb.show();
app.exec();
}
#包括
#包括
#包括
#包括
类MyProxyStyle:公共QProxyStyle
{
公众:
void drawControl(QStyle::ControlElement元素,常量QStyleOption*选项,
QPainter*painter,const QWidget*widget=nullptr)const覆盖
{
if(元素==QStyle::CE_ComboBoxLabel)
{
自动fnt=画师->字体();
fnt.setItalic(真);
画师->设置字体(fnt);
}
QProxyStyle::drawControl(元素、选项、画师、小部件);
}
};
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
应用程序设置样式(新MyProxyStyle);
QCOMBOX cb;
cb.补充条款(“选项1”);
cb.补充条款(“选项2”);
cb.补充条款(“选项3”);
cb.show();
app.exec();
}
通过检索currentData fontRole并将字体应用于画师,我已经能够在绘制功能中实现我想要的功能。虽然它需要复制/粘贴QComboBox绘制代码以在子类中修改它。。。如果有人有一个更干净和简单的方法来解决我的问题,让我知道!不确定我是否理解这个问题,但为什么不能使用CSS?@agilob我希望组合框的标签部分显示与所选项目相同的样式,因此它取决于项目。项目是样式是由代码定义的,我看不到任何使用CSS将其传播到cbb标签的方法。通过检索currentData fontRole并将字体应用到画师,我已经能够在绘制功能中实现我想要的效果。虽然它需要复制/粘贴QComboBox绘制代码以在子类中修改它。。。如果有人有一个更干净和简单的方法来解决我的问题,让我知道!不确定我是否理解这个问题,但为什么不能使用CSS?@agilob我希望组合框的标签部分显示与所选项目相同的样式,因此它取决于项目。项目样式是由代码定义的,我看不到任何使用CSS将其传播到cbb标签的方法。我的问题是我在listview中有不同的字体,默认的字体处理得很好。我只想将所选项目字体应用于组合框标签部分,这将更多地改变标签视图对象而不是listview对象(但在QComboBox类之外无法访问)。哦,是的,对不起,我误解了你的问题。您可以使用QComboBox信号“currentIndexChanged(int index)”,将其与自定义插槽连接,在自定义插槽中使用所选项目的索引(作为参数传递)通过函数“itemData(…)”和“将字体应用于QComboBox”检索字体信息,因此,下拉菜单字体保持不变,但组合框标签字体会根据所选项目进行更改。正如我在问题中所说,我尝试了这个方法