13. QlistView显示iconfont--Apple的学习笔记

一,前言

最近简单学习了下cdr制作png矢量图,但是看到别人用svg矢量图,原来这个更好,放大后像素依然清晰。无意间搜索到居然有人用char就可以显示出矢量图。查了下原来是iconfont。即矢量图做到了字体文件中,我们在word中的特殊符号其实也是这些字体自带的。TypeTool可以查看。网上也可以下载大量的矢量图字体。所以我也下载了一个fontawesome字体。这些矢量图我用TypeTool打开看的编码,其实也可以在此网站找到。

二,需求

我要用下这些ttf格式的icon图标。然后把它加入到列表,列表中添加上checkbox。

三,遇到的问题

1. QListmodule如何添加QWidget?
答:我们常见的Qlist绑定到item在加入module通过view显示出来都是如下常用写法。

void Widget::InitList()
{
    QStandardItemModel *ItemModel = new QStandardItemModel(this);
    m_listview->setModel(ItemModel);
    QStringList strList;
    strList<<"图1"<<"图2"<<"图3"<<"图4"<<"图5";
    int nCount = strList.size();
    for(int i = 0; i < nCount; i++)
    {
        QString string = static_cast(strList.at(i));
        QStandardItem *item = new QStandardItem(string);
        ItemModel->appendRow(item);
    }
    m_listview->setFixedSize(200,300);
}

要checkbox则使用。仅需要修改ItemModel->appendRow(item);

        //ItemModel->appendRow(item);
        item->setCheckable( true );
        item->setCheckState( Qt::Checked );
        ItemModel->setItem( i, item );

但是我还要使用Qlabel widget,所以要用setIndexWidget(index, new QLable);这是QListview的方法,使用方法是从制作好的module中先获取QModelIndex,然后设置QModelIndex。

QModelIndex index = itemModel->indexFromItem(item);
QLabel *info= new QLabel(m_listview);
setIcon(info, QChar(codeInfo[i]));
m_listview->setIndexWidget(index, info);

2. 如何使用ttf文件
答:初始化后绑定到控件进行使用。

void Widget::InitIcon()
{
    int fontId = QFontDatabase::addApplicationFont(":./res/font/fontawesome-webfont.ttf");
    QString fontName = QFontDatabase::applicationFontFamilies(fontId).at(0);
    iconFont = QFont(fontName);
}

使用,先绑定到此font,然后设置此font的编码

void Widget::setIcon(QLabel *lab, QChar chr)
{
    lab->setFont(iconFont);
    lab->setText(chr);
}

3. QListView显示多列
答:QListview无法添加多列。要用多列的话用QTableview。
4. QListview无法添加自定义的Widget?
答:暂时无法解决。我制作的Widget是一行有3个控件,一个checkbox+2个label。

四,效果

image.png

五,小结

主要是使用下IconFont,然后使用了ListView。当然了解了如何自制Iconfont。

你可能感兴趣的:(13. QlistView显示iconfont--Apple的学习笔记)