Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QT 5.15.0 MSVC2015 program compile error: error C2664: "void QPainter::fillPath(const QPainterPath &,const QBrush &)" : Conversion of argument 1 from "int" to "const QPainterPath &" not possible



  • Dear Qt community,

    first of all a big sorry for this post. It is the last question before returning to working QT5.7.1. I am a very very novice qt user.

    I am maintaining the Windows build of the zint bar code generation library. The GUI is made using QT. In 2018, I managed after 1 week of research to build a static qt executable using ms-vc2015 and qt5.7.1 for 32 bit.
    I have a new laptop and tried recent qt 5.15.0 with a similar receipe.


    Unfortunately, I get the following compile error:

    .\qzint.cpp(382): error C2664: "void QPainter::fillPath(const
    QPainterPath &,const QBrush &)" : Konvertierung von Argument 1 von "int"
    in "const QPainterPath &" nicht möglich
    .\qzint.cpp(382): note: Ursache: Konvertierung von "int" in "const
    QPainterPath" nicht möglich
    .\qzint.cpp(382): note: Der nicht definierte Typ "QPainterPath" wird
    verwendet.
    c:\qt\5.15.1static\include\qtgui\qpainter.h(69): note: Siehe Deklaration
    von "QPainterPath"
    

    May I translate the German error messages:

    .\qzint.cpp(382): error C2664: "void QPainter::fillPath(const
    QPainterPath &,const QBrush &)" : Conversion of argument 1 from "int" to
    "const QPainterPath &" not possible
    .\qzint.cpp(382): note: Reason: Conversion of argument 1 from "int" to
    "const QPainterPath &" not possible
    .\qzint.cpp(382): note: The undefined type "QPainterPath" is used.
    c:\qt\5.15.1static\include\qtgui\qpainter.h(69): note: see declaration
    of "QPainterPath"
    

    The steps are as follows:

    • cd C:\qt\qt-everywhere-src-5.15.0
    • configure.bat -static -release -prefix c:\qt\5.15.0static -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -no-openssl -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests -mp
      One may set another destination folder after the -prefix option.
      Attention, the upper command is one long line.
    • nmake
    • nmake install
      The last 3 commands run around 3 hours.
      Make sure, that python may be found in the path.
    • the huge source folder may be deleted to save around 6GB of space.
    • Start in the start menu: "VS2015 x86 Native Tools-Eingabeaufforderung"
    • set QTDIR=C:\Qt\5.15.0static
    • set PATH=C:\Qt\5.15.0static\bin;%PATH%
    • set QMAKESPEC=win32-msvc
    • cd $ZH
    • cd backend_qt
    • qmake backend_qt.pro
    • nmake clean
    • nmake release

    The used program to compile may be downloaded here:

    https://sourceforge.net/projects/zint/files/zint/2.9.0/zint-2.9.0_win32_cmd_tcl.zip/download


    Thank you for any hint.

    Thank you and best regards,
    Harald


  • Lifetime Qt Champion

    Hi and welcome to the forums

    What happens if you just compile zint with 5.15 nonstatic.
    does it still fail?

    Im wondering if its just a change in Qt between 5.7 and 5.15 or
    its due to being static.

    Also tried to download the file in the link but it was a binary.
    I wonder was is in line .\qzint.cpp(382)


  • Moderators

    @Harald-Oehlmann Looks like you're just missing #include <QPainterPath> in qzint.cpp.

    Btw you can cut that 3h compilation time if you exclude modules you don't use by using -skip <module_name> in your configure step. I usually leave about 4-5 core modules and it compiles in about 15 minutes.


  • Lifetime Qt Champion

    @Chris-Kawa
    How many cores do you use ?
    15 min is very good time :=)


  • Moderators

    @mrjj Just your regular off the shelf 8 core i9 (16 threads). That's only the compilation step, excluding configure and install. As I said I only build core, widgets and a handful of smaller modules because that's all I need. The web and QML stuff can easily stretch that to hours.


  • Lifetime Qt Champion

    @Chris-Kawa
    Ok, i still run C4/T8 at home so 15 mins just seemed awesome to me but
    i guess i should also try to exclude the QML stuff. Was not aware it would be that much extra :)
    Thx



  • @mrjj Thank you for the answer. This is highly appreciated.
    May I answer to your questions ?

    What happens if you just compile zint with 5.15 nonstatic. does it still fail?

    Do you mean to recompile qt without the static option ? This takes 3 hours of work. I am sorry, but this is not the aim and much work.

    Im wondering if its just a change in Qt between 5.7 and 5.15 or its due to being static.

    I have no idea

    Also tried to download the file in the link but it was a binary.

    The link goes to the release archive of zint 2.9. It is a .tar.gz file. I am sorry, if this is not suitable for you.

    I wonder was is in line .\qzint.cpp(382)

    There is the following line:

    painter.fillPath(pt, QBrush(m_fgColor));
    

    The whole context is as follows:

                QPainterPath pt;
                pt.moveTo(hex->x, hex->y + (1.0 * radius));
                pt.lineTo(hex->x + (0.86 * radius), hex->y + (0.5 * radius));
                pt.lineTo(hex->x + (0.86 * radius), hex->y - (0.5 * radius));
                pt.lineTo(hex->x, hex->y - (1.0 * radius));
                pt.lineTo(hex->x - (0.86 * radius), hex->y - (0.5 * radius));
                pt.lineTo(hex->x - (0.86 * radius), hex->y + (0.5 * radius));
                pt.lineTo(hex->x, hex->y + (1.0 * radius));
                painter.fillPath(pt, QBrush(m_fgColor));
    

    Thank you again,
    Harald


    As the Forum allows only one post by me per day, I try to add the other answers here:

    @Chris Kawa:

    Thank you, that sounds great. Do you have exact instructions how to do that and how to modify the recipe? Remark that I use QT only for that and the big memory footprint on my harddisk also puzzles me...


  • Lifetime Qt Champion

    Hi

    do you mean to recompile qt without the static option?

    No no, just compile the app with a normal Qt.
    To see it that just works.

    I assume you do have
    #include <QPainterPath> in qzint.cpp. as Chris Kawa asks?

    • the link goes to the release archive of zint 2.9. It is a .tar.gz file.

    I get which seems to be a release and not source code ?

    alt text
    https://sourceforge.net/projects/zint/files/zint/2.9.0/zint-2.9.0_win32_cmd_tcl.zip/download

    ps. I bumped you so you should be able to answer faster/more.



  • @mrjj Thank you for the reply:

    First, I want express again my appolyse to contact here as a novice user.

    Sorry, the URL is:
    https://sourceforge.net/projects/zint/files/zint/2.9.0/zint-2.9.0.tar.gz/download

    Sorry, I don't know what a "normal Qt" is. Is the QT used by me not normal ?
    I suppose, the static build is the most used and most normal out there as anything else leeds into DLL hell we had before within the project.

    No, I don't see QPainterPath as include. The contained includes within the file are:

    #include "qzint.h"
    #include <stdio.h>
    #include <math.h>
    #include <QFontMetrics>
    

    qzint.h containes the following includes:

    #include <QColor>
    #include <QPainter>
    

    May I add the proposed include somewhere ?
    After which other include ?

    Remark, that it should still compile with QT 5.12.4, what is currently used on Linux Operating System. Currently, it compiles there without any reported issues.

    May I also add some extract from the eventually relevant backend_qt.pro file:

    TEMPLATE = lib
    CONFIG += staticlib
    macx{
    	CONFIG -= dll
    	CONFIG += lib_bundle
    }
    
    TARGET = QtZint
    

    Thank you,
    Harald


  • Lifetime Qt Champion

    Hi
    Np :)
    Yes just add the include and see if that helps. ( in cpp should do it )

    By normal, i just mean the one you normally get installed from the site.
    Its none static and it was only to see if it just runs.

    But you seem to have tested that already

    • Remark, that it should still compile with QT 5.12.4, what is currently used on Linux Operating System. Currently, it compiles there without any reported issues.


  • @mrjj Thank you a lot, that vanished the issue.
    The error is gone.

    Now, I have only a remaining link error:

     link /NOLOGO /DYNAMICBASE /NXCOMPAT /OPT:REF /INCREMENTAL:NO /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:release\qtZint.exe @C:\Users\oehhar\AppData\Local\Temp\nmEB22.tmp
    LINK : fatal error LNK1181: Eingabedatei "Qt5Core.lib" kann nicht geöffnet werden.
    NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\link.EXE"": Rückgabe-Code "0x49d"
    Stop.
    

    The required library is present in "c:\qt\5.15.0static\lib".
    Thus, I suppose, there is a path issue.

    The set environment variables are:

    set QTDIR=C:\Qt\5.15.0static
    set PATH=C:\Qt\5.15.0static\bin;%PATH%
    set QMAKESPEC=win32-msvc
    

    Adding:

    set QMAKE_LIBDIR=C:\Qt\5.15.0static\lib
    

    did not help.

    The relevant frontend_qt.pro line is:

    LIBS += -lQtZint -lQt5Core
    QMAKE_LIBDIR += ../backend_qt/release
    

    Adding here:

    QMAKE_LIBDIR += C:/qt/5.15.1static/lib
    

    did the job, but is not very plesant to the other supported platforms.
    In addition, it points to my local laptop.
    But if this is required, it is required.

    Thank you all for solving this and best regards,
    Harald


Log in to reply