关于c++:重写QComboBox实现自定义QFontComboBox可以添加自定义字体显示字体样式

在开发的过程中,有个需要,是增加一个字体抉择框,这个简略,我能够间接用了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技巧和办法
话不多说,下课

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据