ITPub博客

首页 > IT职业 > IT职场 > 重写QComboBox,实现自定义QFontComboBox,可以添加

重写QComboBox,实现自定义QFontComboBox,可以添加

IT职场 作者:flf811124 时间:2021-09-09 10:51:25 0 删除 编辑

在开发的过程中,有个需求,是添加一个字体选择框,这个简单,我可以直接用了QFontComboBox解决,但是我的需求是字体不用系统字体,而是用我们自定义添加的字体库,后来我尝试用QComboBox解决,但是,这个鬼东西却不能单独改变单独item的字体样式,算了,直接自己写吧,话不多说,上代码:


class CFontComboBox : public QComboBox {
    Q_OBJECT
private:
    QListWidget * mFontList;
public:
    CFontComboBox(QWidget * parent = nullptr);
    void addFont(QString famil);
    void addFonts(QStringList famils);
protected:
    void wheelEvent(QWheelEvent ) override;
};

.cpp文件

CFontComboBox::CFontComboBox(QWidgetparent) :
    QComboBox(parent)
{
    mFontList = new QListWidget(this);
    setModel(mFontList->model());
    setView(mFontList);
    mFontList->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setStyleSheet("QComboBox{combobox-popup:0;}");
    setMaxVisibleItems(5);
}
void CFontComboBox::wheelEvent(QWheelEvent * event) {
}
void CFontComboBox::addFont(QString famil) {
    auto item = new QListWidgetItem(famil);
    QFont font;
    font.setFamily(famil);
    item->setFont(font);
    QIcon icon(":icons/T.png");
    item->setIcon(icon);
    mFontList->addItem(item);
}
void CFontComboBox::addFonts(QStringList famils) {
    for (auto famil : famils)
    {
        addFont(famil);
    }
}

大功告成,话不多说,上图:
图片描述

自定义的是没有前面是没有那个图标的,这是我让UI给我设计的,想要的可以拿去用,话不多说,上图:
图片描述

为了防止有人看不懂,我还是解释一下吧,看懂的直接跳过,
setView(),是把我们的View替换上去,然后我们在对我们的View进行操作,

setStyleSheet(“QComboBox{combobox-popup:0;}”);
setMaxVisibleItems(5);

这三句是为了设置滚动条和最大显示个数,不需要的可以不用设置
我这里重写了wheelEvent方法,是为了我不想不让用户通过鼠标去改变字体,不需要的可以不重写,
最后addFont和addFonts不用解释了吧,直接用这两个方法去添加字体都行了
如果感觉我的实例可以帮助到你,记得关注,以后会经常更新Qt技巧和方法
话不多说,下课

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1627/viewspace-2826740/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-15

  • 博文量
    103
  • 访问量
    696