qt QFontDatabase::addApplicationFont添加ttf字体总是返回-1解决方案

本文主要解决了在Qt for Android环境下,使用QFontDatabase::addApplicationFont添加ttf字体时返回-1的问题。关键在于将字体路径从qrc:/2.ttf更改为:/2.ttf,以确保字体文件被正确识别。提供了苹果、安卓等各类字体下载链接,并建议查阅相关博客了解更多详情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


说明一下

这篇博客是修正于qt for android中文字体显示异常解决方案这篇博客


解决方案其实在上面博客也贴出来,这里只是重申一下;

下面涉及到的ttf文件到我上面的博客去下载即可,苹果、安卓各种字体 应有尽有

下面看我使用的方式:

  //加载ttf文件
  int fontId = QFontDatabase::addApplicationFont("qrc:/2.ttf")
SwitchCardWidget::SwitchCardWidget(QSharedPointer<EntityControl> model, QWidget *parent) : WidgetBase(model, parent) { this->switchCard_ = model.dynamicCast<EntitySwitchCard>(); WidgetBase::setSize(); m_gridLayout = new QGridLayout(this); m_gridLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); // 元素间距 m_gridLayout->setSpacing(0); m_gridLayout->setContentsMargins(5, 5, 5, 5); // 图标 iconLabel = new QLabel(this); int fontId = QFontDatabase::addApplicationFont( QStringLiteral(":/font/icon.ttf")); // 加入体,并获取体ID QString fontName = QFontDatabase::applicationFontFamilies(fontId).at(0); // 获取体名称 QFont iconFont = QFont(fontName); iconFont.setPixelSize(switchCard_->getIconSize()); // 设置体 iconLabel->setFont(iconFont); // 设置Label的体 iconLabel->setStyleSheet( QString("color:%1").arg(switchCard_->getIconColor())); iconLabel->setText( QChar((QString("0x%1").arg(switchCard_->getIcon())).toInt(nullptr, 16))); // 主次文本 m_VLayout = new QVBoxLayout(); // 主文本 mainStr = new QLabel(this); loadTextFont(mainStr, true); mainStr->setText(switchCard_->getText()); // 次文本 desStr = new QLabel(this); loadTextFont(desStr, false); desStr->setText("开关"); // 开关 switchButton = new ToggleSwitchWidget( this, 88, 44, switchCard_->getBrackgroupStr(), switchCard_->getHighColor(), switchCard_->getIconBrackgroupStr()); // 隐藏组件,但占用布局 QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect; effect->setOpacity(0.0); // 完全透明 if (switchCard_->getTheme() == 0) { mainStr->setAlignment(Qt::AlignLeft | Qt::AlignBottom); desStr->setAlignment(Qt::AlignLeft | Qt::AlignTop); m_VLayout->addWidget(mainStr, 0); m_VLayout->addWidget(desStr, 1); m_gridLayout->addWidget(iconLabel, 0, 0, Qt::AlignLeft); m_gridLayout->addLayout(m_VLayout, 0, 1, 1, 6, Qt::AlignLeft); m_gridLayout->addWidget(switchButton, 0, 7, Qt::AlignCenter); } else if (switchCard_->getTheme() == 1) { mainStr->setAlignment(Qt::AlignLeft | Qt::AlignTop); desStr->setAlignment(Qt::AlignLeft | Qt::AlignBottom); m_gridLayout->addWidget(mainStr, 0, 0, 1, 3); m_gridLayout->addWidget(iconLabel, 1, 0, 1, 3, Qt::AlignCenter); m_gridLayout->addWidget(desStr, 2, 0, 1, 2); m_gridLayout->addWidget(switchButton, 2, 2, 1, 1, Qt::AlignRight | Qt::AlignBottom); } else { iconLabel->setStyleSheet( QString("background-color:%1").arg(switchCard_->getIconColor())); mainStr->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); desStr->setAlignment(Qt::AlignHCenter | Qt::AlignTop); m_VLayout->addWidget(mainStr, 0, Qt::AlignHCenter | Qt::AlignBottom); m_VLayout->addWidget(desStr, 1, Qt::AlignHCenter | Qt::AlignTop); m_gridLayout->addWidget(iconLabel, 0, 0, 4, 1, Qt::AlignHCenter | Qt::AlignBottom); m_gridLayout->addLayout(m_VLayout, 4, 0, 2, 1, Qt::AlignCenter); m_gridLayout->addWidget(switchButton, 6, 0, 2, 1, Qt::AlignHCenter | Qt::AlignTop); } // 设置背景颜色,圆角 QString styleSheet = QString("background-color: %1; " "border-radius: %2px; " "border: 1px solid %3; ") .arg(switchCard_->getBrackgroupStr()) .arg(switchCard_->getRadius()) .arg(switchCard_->getBrackgroupStr()); // 强制重新绘制 //this->setAttribute(Qt::WA_StyledBackground); this->setStyleSheet(styleSheet); connect(switchButton, &ToggleSwitchWidget::toggled, this, &SwitchCardWidget::onSwitchOn); }iconLabel圆形背景
03-25
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fu_Lin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值