Important: Please read the Qt Code of Conduct -

QPainter::drawText() draws distorted text in some combinations of font size and font stretch factor

  • Hey,

    I have a problem with QPainters drawText() method. Which I think is a Bug in Qt.

    If i run the following minimal demonstration application on my Ubuntu 12.04 the drawText() produces a deformed output how you can see on the following pictures.
    The Problem can also be reproduced on a Fedora 19 machine. If I run the same Application on Windows the output is like expected (same font is installed/used).

    The deformation only appears on some combinations (ranges?!?) of font-size and font-stretch-factor. In such cases the is alwas a warning in stderr when closing the programm, which says:
    [warning] (thread/qmutex.cpp:194) - QMutex: destroying locked mutex

    I could reproduce this behavieor with Qt 5.1 and 5.0.2 and with other fonts.

    Is this a Bug in Qt and has anybody a workaround for this Problem?

    Screenshot Ubuntu 12.04 32Bit (Gnome Classic)
    ! 12.04)!

    Screenshot Windows 7 64Bit
    ! 7 64Bit)!

    // Main.cpp
    #include "mainwindow.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    QApplication a(argc, argv);
    MainWindow w;;

    return a.exec&#40;&#41;;


    // MainWindow.h
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>

    namespace Ui {
    class MainWindow;

    class MainWindow : public QMainWindow

    explicit MainWindow(QWidget *parent = 0);

    QString GetFont(&#41;;

    void paintEvent(QPaintEvent *ap_event);

    Ui::MainWindow *ui;
    QFont font;

    #endif // MAINWINDOW_H

    // MainWindow.cpp
    #include "MainWindow.h"
    #include "ui_MainWindow.h"

    #include <QPainter>

    MainWindow::MainWindow( QWidget *parent ) :
    QMainWindow( parent ),
    ui( new Ui::MainWindow ) {
    ui->setupUi( this );

    MainWindow::~MainWindow() {
    delete ui;

    void MainWindow::paintEvent( QPaintEvent */event/ ) {
    QString str( "Hello World" );
    QPoint pos( 10, 10 );

    QFont font( "Ubuntu Mono" );
    font.setPointSize( 40 );
    font.setStretch( 200 );
    font.setUnderline( true );
    font.setOverline( true );

    QFontMetrics fm( font );
    QRect boundingRect( pos, fm.size( 0, str ) );

    QPainter painter( this );
    painter.setPen( Qt::black );
    painter.fillRect( boundingRect, Qt::lightGray );
    painter.setFont( font );

    // probleme here
    // Warning: QMutex: destroying locked mutex
    painter.drawText( boundingRect, Qt::AlignCenter, str );

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    I indeed sounds like a bug, did you check the "bug report system": ?

    If nothing has been reported yet you may consider creating a new bug report

  • Hey,

    Thank you for your help.

    I've checked the bug report system already. I couldn't find any Bug which distorted the text the same way like in may case.

    The Bug which comes close mine best is QTBUG-13682. But with an other form of distortion.

    Therefore I will create a new bug report during the day.

  • Lifetime Qt Champion

    Don't forget to also post your new bug report here so other may follow

  • I just created a bug report.


Log in to reply