qt客户端程序使用svg图片资源的几种方法

直接使用svg格式文件资源的情况

1. 直接在UI控件属性面板中选择部分支持icon图标的控件的icon来源,这样图标可以显示

2.给toolbutton添加样式

 qproperty-icon: url(:/new/prefix1/resource/ball.svg); qproperty-iconSize: 300px 56px;

 

3.自定义一个qwidget 重写paintevent方法

void svgrenderwidget::paintEvent(QPaintEvent *event)
{
    QPainter qPainter(this);
    QSvgRenderer m_svgRender;
   m_svgRender.load(QString(":/new/prefix1/resource/ball.svg"));
   m_svgRender.render(&qPainter ,QRectF(0,0,this->size().width() ,this->size().height()));
}

 

使用svg转的矢量字体库的情况

使用https://www.iconfont.cn网站先建立图标项目,图标整理完以后,下载项目,找到css中对图标的编号

在QT资源中导入该ttf字体库资源。

1. 给pushbutton设置font和text。

    int fontId = QFontDatabase::addApplicationFont(":/new/prefix1/resource/font/iconfont.ttf");
    QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
    QFont font;
    font.setFamily(fontFamilies.at(0));
    font.setPointSize(10);
    ui->pushButton->setFont(font);
    QString str = QString("%1%2").arg(QChar(0xe6f3)).arg("代码");
    ui->pushButton->setText(str);

如有必要的话可以修改图标颜色

    ui->pushButton_3->setStyleSheet("color: rgb(200 , 167 , 0);");

2. 在qwidget上显示图标序列,即绘制矢量文本显示出图片

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setPen(QColor("#000000"));
    painter.setFont(this->font);

    painter.drawText(10,30, FontAwesomeIcons::Instance().getIconChar(FontAwesomeIcons::IconIdentity::icon_component));
    painter.drawText(30,30, "component");

    painter.drawText(200,30, FontAwesomeIcons::Instance().getIconChar(FontAwesomeIcons::IconIdentity::icon_code));
    painter.drawText(230,30, "code");


}

 

注意:

qwidget的qss中使用svg格式的图片设置样式,并不能显示,我也没搞懂。在qwidget的样式表总输入background-image: url(:/new/prefix1/resource/ball.svg);

 

最终的测试效果

 

 可运行demo程序的工程如下 (qt5.10 +windows)

链接:https://pan.baidu.com/s/1u4zVsYHg9tF_E7LbtWmUBA
提取码:jce9

posted on 2020-02-14 16:57  maoliangwu  阅读(...)  评论(...编辑  收藏

统计