当我更改我的QComboBox comboBox->setFont(whateverQFont);
的字体时,它也会应用在下拉菜单中(所有项目),它会覆盖我在{{1}项目上设置的Qt :: FontRole数据}}
我只想在QComboBox标签上设置一个字体,并按原样显示下拉列表。甚至更好:直接使用与所选项目相同的字体 有没有一种简单的方法可以做到这一点?
编辑 Jasonhan 的解决方案适用于可编辑的QComboBox( - >设置QLineEdit上的字体),但不适用于常规QComboBox,因为QLabel是私人的。
答案 0 :(得分:0)
在开始实现自定义模型之前,您可以尝试使用QListView。 它只适用于下拉菜单,您可以使用通常的 setFont 功能更改其字体;你必须将它应用于你的QComboBox例程 setView 。
这样的事情(它不是Qt C ++代码,我已经跳过函数调用中的所有参数):
QComboBox *combobox = new QComboBox();
combobox->setFont();
...
QListView *listview = new QListView();
listview->setFont();
combobox->setView(listview);
答案 1 :(得分:0)
两年后,我看到了这个问题。我不知道您是否找到了更好的方法。如果没有,那么以下代码可能会给您提示。
如您所说的 QComboBox
标签实际上是QLineEdit
,因此您只需要设置此组件的字体即可解决问题。
QComboBox *box = new QComboBox();
//add some list items to box
if (box->lineEdit())
box->lineEdit()->setFont(font);//font is your desirable font
答案 2 :(得分:0)
对不可编辑的QComboBox起作用的方法是安装QProxyStyle,该QProxyStyle在绘制CE_ComboBoxLabel控件元素时设置字体。
下面是将标签字体设置为斜体的示例:
#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();
}