Announcement

Collapse
No announcement yet.

Qt Announces Changes To Simplify Its Commercial Licensing

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #21
    Originally posted by discordian View Post
    The only software kit that fits a similar broad cross-platform environment is WxWidgets, which doesn't seem to go anywhere
    We switched from Qt to wxWidgets for our desktop application and in general are quite happy with this transition. There are few major advantages: it's much less bloated, can be easily customized and built for specific purposes using cmake, e.g. excluding unused features (practically impossible task with Qt), can be statically linked so no need for a "deployment tool" which bundles tens of megabytes of Qt runtime and dependencies. They are also more responsive to bug reports in general and it's being actively developed. And native look and feel on 3 major platforms is nice (on Linux it's GTK backend).

    Comment


    • #22
      Originally posted by dremon_nl View Post
      We switched from Qt to wxWidgets for our desktop application and in general are quite happy with this transition. There are few major advantages: it's much less bloated, can be easily customized and built for specific purposes using cmake, e.g. excluding unused features (practically impossible task with Qt), can be statically linked so no need for a "deployment tool" which bundles tens of megabytes of Qt runtime and dependencies. They are also more responsive to bug reports in general and it's being actively developed. And native look and feel on 3 major platforms is nice (on Linux it's GTK backend).
      Can you elaborate a bit on the "excluding unused features" part? To my knowledge, Qt5 was about modularization (among other things) What were you trying to exclude and couldn't? (I haven't worked with Qt and probably never will since I'm not a C++ guy, I'm just curious.)

      Comment


      • #23
        Originally posted by bug77 View Post

        Can you elaborate a bit on the "excluding unused features" part? To my knowledge, Qt5 was about modularization (among other things) What were you trying to exclude and couldn't? (I haven't worked with Qt and probably never will since I'm not a C++ guy, I'm just curious.)
        Qt for all practical purposes is a multi-gigabyte framework which you install using their official installer (outside of linux distro packaging with custom patches and hard binary dependencies on hundreds of other shared libs). This is basically all or nothing, and it's modular architecture is only applicable on a very high level defined by the Qt Company, e.g. a separation between QtCore, QtNetwork, QtGui, QtWidgets, QtWebEngine etc, which you can't really change. I mean, theoretically, having a source code, you can, but this is an impossible task considering the immense complexity and size of it. So from all practical purposes each Qt application must also include most of those core DLLs pre-built and pre-bundled for you. Plus all of the platform, imaging and other plugins they have, misc resource files, etc. They even have created macdeployqt and windeployqt (and there is also a 3rd-party linuxdeployqt) tool to facilitate application assembling, which takes all those huge DLLs and tens of even hundreds of other files and bundles them together so you can zip your app and give it to the user. And doing a cross compilation with Qt is extremely complicated making CI/CD a pain in the arse.

        wxWidgets has cmake-based build system where you can choose what do you want to include in the library build. So you can turn off a lot of features if you don't use them, line MDI, ribbon, media controls, HTML, etc. And enable a static build, because they have very permissive license. Which produces a lean and mean cross-platform GUI library without any dependencies. And it's small comparing to a Qt: the build takes about 6 minutes on my Thinkpad laptop.
        They also use a system webview instead of bundling 100MB Chromium engine (Edge, Safari or GTK webview) for a web component.

        P.S. When Apple released M1 platform I just recompiled wxWidgets for ARM64 architecture and it worked. Qt struggled for more than a year to release a beta version.

        Comment


        • #24
          lowflyer IIRC that's a fork of Qt4

          Comment


          • #25
            Originally posted by dremon_nl View Post

            Qt for all practical purposes is a multi-gigabyte framework which you install using their official installer (outside of linux distro packaging with custom patches and hard binary dependencies on hundreds of other shared libs). This is basically all or nothing, and it's modular architecture is only applicable on a very high level defined by the Qt Company, e.g. a separation between QtCore, QtNetwork, QtGui, QtWidgets, QtWebEngine etc, which you can't really change. I mean, theoretically, having a source code, you can, but this is an impossible task considering the immense complexity and size of it. So from all practical purposes each Qt application must also include most of those core DLLs pre-built and pre-bundled for you. Plus all of the platform, imaging and other plugins they have, misc resource files, etc. They even have created macdeployqt and windeployqt (and there is also a 3rd-party linuxdeployqt) tool to facilitate application assembling, which takes all those huge DLLs and tens of even hundreds of other files and bundles them together so you can zip your app and give it to the user. And doing a cross compilation with Qt is extremely complicated making CI/CD a pain in the arse.

            wxWidgets has cmake-based build system where you can choose what do you want to include in the library build. So you can turn off a lot of features if you don't use them, line MDI, ribbon, media controls, HTML, etc. And enable a static build, because they have very permissive license. Which produces a lean and mean cross-platform GUI library without any dependencies. And it's small comparing to a Qt: the build takes about 6 minutes on my Thinkpad laptop.
            They also use a system webview instead of bundling 100MB Chromium engine (Edge, Safari or GTK webview) for a web component.

            P.S. When Apple released M1 platform I just recompiled wxWidgets for ARM64 architecture and it worked. Qt struggled for more than a year to release a beta version.
            I understand what you're saying, but then we have this:
            https://archlinux.org/packages/commu.../wireshark-qt/
            An entire Qt app, less then 10MB installed. And not "hundreds of shared libs", but less than a dozen.

            Granted, Qt can and is boneheaded in certain ways, but surely it's not as bad you're making it sound.

            Comment


            • #26
              Originally posted by bug77 View Post

              I understand what you're saying, but then we have this:
              https://archlinux.org/packages/commu.../wireshark-qt/
              An entire Qt app, less then 10MB installed. And not "hundreds of shared libs", but less than a dozen.

              Granted, Qt can and is boneheaded in certain ways, but surely it's not as bad you're making it sound.
              That package doesn't install its own Qt, it depends on system Qt, allowing it to be smaller than a standalone distribution. The dependencies include qt5-multimedia and qt5-svg. The file list confirms it barely installs anything itself.

              Comment


              • #27
                Originally posted by Jaxad0127 View Post

                That package doesn't install its own Qt, it depends on system Qt, allowing it to be smaller than a standalone distribution. The dependencies include qt5-multimedia and qt5-svg. The file list confirms it barely installs anything itself.
                Ah, I see. Well, if what you aim for is to redistribute a bunch of widgets, Qt is not the way to do it. Not because Qt is bloated, but because Qt is not a widget library. That description is more fitting for wxWidgets or GTK. For some reason Wikipedia indeed describes Qt as a "widget toolkit", but the official wiki gets it right: "application development framework".
                So yes, when using the wrong tool for the job, your job will suck (I should know, I'm shoving Java where it's not even remotely the right solution). Luckily, dremon_nl was able to drop the wrong tool and go for the right one. I know many projects won't allow that, for one reason or another.

                Comment


                • #28
                  Originally posted by discordian View Post
                  and crossplatform with GTK is still a nightmare.
                  Even with GTK4?

                  Comment


                  • #29
                    Originally posted by bug77 View Post

                    For some reason Wikipedia indeed describes Qt as a "widget toolkit", but the official wiki gets it right: "application development framework".
                    One disadvantage of it is that it basically forces you into their object, ownership and async event-based model for almost everything. From my experience (many years of doing a Qt-based development) it's incredibly complex and error-prone, it's just something that should be really left behind. I can't really imagine starting any large project in C++ or Qt anymore. Any non-trivial application is literally riddled with memory-related bugs originating from incorrect use after free or double free or similar issues. And it has nothing to do with developer skills, it's just the C++ combined with the way the object lifetimes are handled in Qt.

                    Comment


                    • #30
                      Originally posted by dremon_nl View Post
                      One disadvantage of it is that it basically forces you into their object, ownership and async event-based model for almost everything.
                      Well yes, that's the difference between a library and a framework: the framework is opinionated. It's nonsensical to pick a framework and then complain it herds down a particular path.
                      They both have their uses, you just need to pick carefully.

                      Comment

                      Working...
                      X