Supporting Qt 6 - What's needed?

Is see the advantage of merging the QT6 migration branch back into master, when and ONLY when the migration is (nearly) finished and does not yield any major problems.

I can think of a myriad of reasons not to merge intermediate commits of a major framework migration into master. There will probably be only a few devs who will work on this migration. During this process there will inevitably be build breaking errors. Even minor commits could break the build, as the committing dev can not be aware of all possible hickups in all used system/setups etc. Not intentionally of course, but that’s how it works. Now you force these problems onto all other devs who are not directly involved with this migration. That is IMHO a really bad idea.

ACCIDENTAL DUPLICATE POST :blush:

This is beside the point, but how do we coordinate this with Toponaming? Do we work on it concurrently or prioritize one over the other?

Now you force these problems onto all other devs who are not directly involved with this migration. That is IMHO a really bad idea.

Nobody is planning on merging untested code onto master, you make a PR, it is tested in all platforms, reviewed, iterated, repeat until done and then it’s merged. I agree if there will be several devs involved a branch should be created once we have an initial PR (no point in doing it now if it’s just going to be the same as master).

I say toponaming is waaaay more important than this, it would be best to have that in first to not get huge conflicts but if there’s no guarantee or estimate for merging that and someone can’t realistically help with toponaming but can help with migration it might be better if they do it anyways, we can’t freeze freecad’s development for a mystical merge that never comes.

If migrating to Qt6 perhaps a discussion about migrating to QML could be had? I think that would be a significantly larger task though, but grouping such work together might make sense from a logical standpoint.

Oh, and I wholeheartedly agree that TNP mitigation is substantially more important. But different devs have different areas of interest/focus so other proposed efforts shouldn’t necessarily be discounted either. I just wish I had more talent with development.

Toponaming is independent of this: no Qt related code should be anywhere near the toponaming code. We should not have any issues with merge conflicts, etc.

I think this discussion is basically moot until there is actually a Qt6 PR to consider – then we can look at how much code we are talking about, and how many PRs we expect it to be. So I circle back to my original question: is there any code in the works? Does anyone have a Qt6 branch we can start looking at?

We will not merge intermediate commits – only functionally complete PRs will be considered.

I remind everyone that git is decentralized by design: you are always welcome to create a branch in your fork and to invite other collaborators to either submit PRs to YOU, or to join a team you give access to that repository. In many respects that is easier than trying to use an “official” branch, since you’d still have to submit PRs to the official branch and wait for them to be reviewed, etc.

there was this

At a quick glance we probably don’t want to base any further work on those experiments, since that’s a wholesale replacement of Qt5 with Qt6. What we will ultimately merge needs to support using either, via a switch in cMake.

realthunder can you weigh-in on this topic since you’re working toward a toponaming merge. Should we focus on qt6 post-toponaming or can we do it concurrently?

I follow https://doc.qt.io/qt-6/porting-to-qt6-using-clazy.html
https://github.com/Kuzma30/FreeCAD/tree/qt6
I apply 4 checks as shown on “How to apply Clazy checks within Qt Creator” chapter.
Some of files is failed (600+) But QtCreator not save failed files list. (or I make mistake and not found where)

Edit
Run checks without strings convertion
https://github.com/Kuzma30/FreeCAD/tree/qt6v1

I decide start from “Disable use of C++ API deprecated in Qt 5.15” chapter
https://github.com/Kuzma30/FreeCAD/tree/qt5.15

I use globalStrut as QSize (0,0) (defaults value). I think this is not correct. I don’t know correct values.

P.S. During replace obsolete function I see many files with different newline style (Dos, Unix-way). Also there are different code style formatting. May be we cleanup our code with dos2unix or unix2dos?

Not worth it. Should be a separate PR. Remember we are also trying to integrate Toponaming.


Edit: let’s try to avoid eating baby kittens AKA context swicthing: https://webchick.net/please-stop-eating-baby-kittens

are those changes still compatible with qt 5.9?

No.
It will compile with qt6 only. I made it to see how clazy porting tool work.
If we follow porting guide than we must disable obsolete function for qt5.15 not 5.9. (read my previous post)

disclaimer - i do not do c…

but is it not the https://www.qt.io/blog/porting-from-qt-5-to-qt-6-using-qt5compat-library that is needed for fc at this point in time, both 5 & 6 compilation and runtimes?

in my amateur eyes clazy seems to be aimed at porting to 6 and ditching 5…

this whole story also raises the hypothetical question if fc should still keep pyside - alias, or switch to pyside2 (and lock the door on 4) - sort of implies that also in c one could go for 5 instead of 4 base…
had one edge use case (on linux) where i could not get imports working (forgot what it was - probably a not very important use case), since the fc code base uses pyside imports while in reality the installed package is pyside2…

if someone finds the time, just out of personal interest,
how is the shiboken/pivy deps influenced by 5 or 6 (other than that it obviously has to be complied to matching qt and py versions)?

yes but we can’t take the suggestion, keep those that are compatible with both as is and those qt6 specific inside if else blocks

this whole story also raises the hypothetical question if fc should still keep pyside - alias, or switch to pyside2 (and lock the door on 4) - sort of implies that also in c one could go for 5 instead of 4 base…

the door for qt4 is already closed, minimum supported version is qt 5.9 currently, using pyside2 might be problematic because we now need pyside6 for qt6, perhaps we can have an alias that is set to pyside2 or pyside6 depending on the chosen qt version? I don’t know much of how this part works.

how is the shiboken/pivy deps influenced by 5 or 6 (other than that it obviously has to be complied to matching qt and py versions)?

There is shiboken6, I guess we need pivy compiled against qt6 too.

Someone volunteer to open an upstream Pivy ticket for this?

Three questions:

  1. What about Python itself? Which version is gonna be the default for 0.21? 3.10 has some interesting new stuff with switch/case.
  2. About PySide6. Why is that “required” for external WB instead of just “Qt-6” when you already use it internally?
  3. Is Qt-6 gonna be used in 0.21 ?