Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Embedding custom fonts in Qt 4.8.4
Forum Updated to NodeBB v4.3 + New Features

Embedding custom fonts in Qt 4.8.4

Scheduled Pinned Locked Moved General and Desktop
8 Posts 3 Posters 6.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    itpenguin
    wrote on last edited by
    #1

    Hello,
    we have problems embedding fonts in our application using QFontDatabase::addApplicationFontFromData:

    @ QStringList list;
    QFontDatabase::removeAllApplicationFonts();
    list << "qdsFont1.ttf" << "qdsFont2.ttf" << "qdsFont3.ttf" << "qdsFont4.ttf";
    int fontID(-1);
    bool fontWarningShown(false);
    for (QStringList::const_iterator constIterator = list.constBegin(); constIterator != list.constEnd(); ++constIterator) {
    QFile res(":/polices/" + *constIterator);
    if (res.open(QIODevice::ReadOnly) == false) {
    if (fontWarningShown == false) {
    QMessageBox::warning(0, argv[0], (QString)"Impossible to open font file " + QChar(0x00AB) + *constIterator + QChar(0x00BB) + ".");
    fontWarningShown = true;
    }
    } else {
    fontID = QFontDatabase::addApplicationFontFromData(res.readAll());
    if (fontID == -1 && fontWarningShown == false) {
    QMessageBox::warning(0, argv[0], (QString)"Impossible to load " + QChar(0x00AB) + *constIterator + QChar(0x00BB) + ".");
    fontWarningShown = true;
    }
    QStringList fntList = QFontDatabase::applicationFontFamilies ( fontID );
    for (QStringList::const_iterator constIt = fntList.constBegin(); constIt != fntList.constEnd(); ++constIt) {
    qDebug() << argv[0] << "QFont=" << *constIterator << "QFont=" << *constIt;
    }
    }
    }
    a.setFont(QFont("qdsFont1"),13);

    #define FUNCIDENT "main"
    int ps=13;
    QString str="qdsfont1";
    QFont testFont(str,ps);
    qDebug() << FUNCIDENT << "font=" << str << "pointsize=" << ps;
    QFontInfo info(testFont);
    qDebug() << FUNCIDENT << "font=" << info.family() << "pixelsize=" << info.pointSize() << info.pixelSize() << info.weight() << info.exactMatch();
    @

    The fonts are stored in a qt resource file.

    a.setFont() does not work. ( QApplication a(argc, argv); )

    After creating the testFont QFontInfo allways tells me, that Arial is used, not my own font.

    Qt 4.8.4 / Linux
    created with
    @/opt/qt-4.8.4-src/configure --prefix=/opt/qt-4.8.4-i386 --platform=linux-g++-32 -no-glib
    -nomake demos -nomake examples -confirm-license -opensource -no-openssl -no-opengl -no-nis
    -xinput -no-cups -no-dbus -no-webkit -xrender -fontconfig
    @
    ldd shows me that the application uses these libs:
    @ linux-gate.so.1 => (0xffffe000)
    libqwt.so.6 => /opt/qwt-6.0.2/lib/libqwt.so.6 (0xb7e40000)
    libqdswidget.so => /home/qdsemu/qdsemu/home/lib/libqdswidget.so (0xb7d0a000)
    libqdsemu.so.1.0.6 => /home/qdsemu/qdsemu/home/lib/libqdsemu.so.1.0.6 (0xb7d03000)
    libitp.so => /home/qdsemu/qdsemu/home/lib/libitp.so (0xb7cfd000)
    libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0xb7cdf000)
    libQt3Support.so.4 => /opt/qt-4.8.4-i386/lib/libQt3Support.so.4 (0xb79ee000)
    libQtSql.so.4 => /opt/qt-4.8.4-i386/lib/libQtSql.so.4 (0xb79ad000)
    libQtXml.so.4 => /opt/qt-4.8.4-i386/lib/libQtXml.so.4 (0xb7965000)
    libQtNetwork.so.4 => /opt/qt-4.8.4-i386/lib/libQtNetwork.so.4 (0xb783a000)
    libQtGui.so.4 => /opt/qt-4.8.4-i386/lib/libQtGui.so.4 (0xb6d17000)
    libQtCore.so.4 => /opt/qt-4.8.4-i386/lib/libQtCore.so.4 (0xb6a0a000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xb69f4000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6910000)
    libm.so.6 => /lib/libm.so.6 (0xb68eb000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb68e0000)
    libc.so.6 => /lib/libc.so.6 (0xb67b3000)
    libQtSvg.so.4 => /opt/qt-4.8.4-i386/lib/libQtSvg.so.4 (0xb675a000)
    librt.so.1 => /lib/librt.so.1 (0xb6751000)
    libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0xb6743000)
    libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb664c000)
    libz.so.1 => /lib/libz.so.1 (0xb6639000)
    libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb6615000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb65a8000)
    libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0xb659f000)
    libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0xb6587000)
    libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0xb657f000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6545000)
    libdl.so.2 => /lib/libdl.so.2 (0xb6541000)
    /lib/ld-linux.so.2 (0xb7f2d000)
    libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6522000)@

    1 Reply Last reply
    0
    • jazzycamelJ Offline
      jazzycamelJ Offline
      jazzycamel
      wrote on last edited by
      #2

      If you have your TTF's in a resource why use addApplicationFontFromData() at all? Why not simply do:

      @
      QFontDatabase.addApplicationFont(':/polices/qdsFont1.ttf')
      @

      I successfully add 10+ custom fonts to my application this way.

      Hope this helps ;o)

      For the avoidance of doubt:

      1. All my code samples (C++ or Python) are tested before posting
      2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
      1 Reply Last reply
      0
      • I Offline
        I Offline
        itpenguin
        wrote on last edited by
        #3

        Well, that makes no difference:
        @ QStringList list;
        QFontDatabase::removeAllApplicationFonts();
        list << "qdsFont1.ttf" << "qdsFont2.ttf" << "qdsFont3.ttf" << "qdsFont4.ttf";
        int fontID(-1);
        bool fontWarningShown(false);
        for (QStringList::const_iterator constIterator = list.constBegin(); constIterator != list.constEnd(); ++constIterator) {
        QString res(":/polices/" + *constIterator);
        fontID = QFontDatabase::addApplicationFont(res);
        if (fontID == -1 && fontWarningShown == false) {
        QMessageBox::warning(0, argv[0], (QString)"Impossible to load " + QChar(0x00AB) + *constIterator + QChar(0x00BB) + ".");
        fontWarningShown = true;
        }
        QStringList fntList = QFontDatabase::applicationFontFamilies ( fontID );
        for (QStringList::const_iterator constIt = fntList.constBegin(); constIt != fntList.constEnd(); ++constIt) {
        qDebug() << argv[0] << "QFont=" << *constIterator << "QFont=" << *constIt;
        }
        }
        a.setFont(QFont("qdsFont1"),13);

        #define FUNCIDENT "main"
        int ps=13;
        QString str="qdsFont1";
        QFont testFont(str);
        qDebug() << FUNCIDENT << "font=" << str << "pointsize=" << ps;
        QFontInfo info(testFont);
        qDebug() << FUNCIDENT << "font=" << info.family() << "pixelsize=" << info.pointSize() << info.pixelSize() << info.weight() << info.exactMatch();
        @
        The shortened output of my program:
        @QFont= "qdsFont1.ttf" QFont= "qdsFont1"
        QFont= "qdsFont2.ttf" QFont= "qdsFont2"
        QFont= "qdsFont3.ttf" QFont= "qdsFont3"
        QFont= "qdsFont4.ttf" QFont= "qdsFont4"
        font= "qdsFont1" pointsize= 13
        font= "Arial" pixelsize= 12 12 50 false
        @

        As you can see:

        • fonts are added to the application
        • font is not used
        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Hi,

          Are you sure your font family name is correct ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • jazzycamelJ Offline
            jazzycamelJ Offline
            jazzycamel
            wrote on last edited by
            #5

            [quote author="SGaist" date="1371123158"]Hi,

            Are you sure your font family name is correct ?[/quote]

            This must be correct because its being returned by QFontDatabase::applicationFontFamilies() for fontID.

            Is a point size of 13 available with your font? Maybe try one of the standard sizes as returned by QFontDatabase::standardSizes(). I remember this being an issue for me as MacOSX seems to default to 13pt and I had to override it to 12pt to prevent errors with font widgets.

            Hope this helps ;o)

            For the avoidance of doubt:

            1. All my code samples (C++ or Python) are tested before posting
            2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
            1 Reply Last reply
            0
            • I Offline
              I Offline
              itpenguin
              wrote on last edited by
              #6

              I did not specify a point size, when creating the font ( QFont testFont(str); ).
              Nevertheless the point size of font 1 is 13.

              1 Reply Last reply
              0
              • jazzycamelJ Offline
                jazzycamelJ Offline
                jazzycamel
                wrote on last edited by
                #7

                No, but you do when settings the application font.

                Anywho, stupid question, but I take it that the fonts you are loading are proven to work elsewhere? The only reason I ask is because I have just run all the steps that you have with a number of different TTF's and I can't reproduce the problem. If the fonts are freely available somewhere I can try my tests with the actual TTF's.

                For the avoidance of doubt:

                1. All my code samples (C++ or Python) are tested before posting
                2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
                1 Reply Last reply
                0
                • I Offline
                  I Offline
                  itpenguin
                  wrote on last edited by
                  #8

                  Well, actually the origin for my fonts are *.fon files (windows font format).
                  I had to translate them to ttf using fontforge.
                  I have no problem sending you one of these fontfiles.

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved