diff options
author | John Fultz <jfultz@wolfram.com> | 2023-07-18 00:44:06 -0500 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2023-07-18 00:44:06 -0500 |
commit | 53f394839396edd537785fc40db3090839dd7c04 (patch) | |
tree | 4198dc35fd903fbd537d798a5de06afb2e7b3253 /quacker/movebox.cpp | |
parent | a68140dfb546b8a89c48bfe99d7b56d9c2908569 (diff) |
Fix Qt6 MOC compilation on some platforms.
That was super painful. It seems that some of the Quackle types that
have custom operator==() give fits to the MOC compiler when those
types are used as arguments for slots and/or signals (or maybe it's
only when they're connected in a certain way...frankly, I never did
figure this out precisely to my satisfaction). The compilers provide
very little help in resolving this problem.
Once I understood the problem, VS22 was giving me just the tiniest
morsel, enough that I could hunt down the offending slot/signal
(it wasn't even giving me the name of the slot/signal...just the type
it was trying to use). I've changed all offending functions to use
const pointers to types instead of const references, and this makes
Qt happy.
I couldn't find any info on the web directly about this, but here's
the closest I did find, which suggests that this is related to
increased functionality in Qt6 regarding reflection.
https://forum.qt.io/topic/141434/
This fixes my VC++22 x86-64 build. Hopefully it fixes all of the
others, too.
Diffstat (limited to 'quacker/movebox.cpp')
-rw-r--r-- | quacker/movebox.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/quacker/movebox.cpp b/quacker/movebox.cpp index 38fcfe7..ae6c2f5 100644 --- a/quacker/movebox.cpp +++ b/quacker/movebox.cpp @@ -61,7 +61,8 @@ void MoveBox::moveActivated(QTreeWidgetItem *item) { if (item == 0) { - emit setCandidateMove(Quackle::Move::createNonmove(), nullptr); + Quackle::Move nonMove = Quackle::Move::createNonmove(); + emit setCandidateMove(&nonMove, nullptr); return; } @@ -73,7 +74,8 @@ void MoveBox::moveActivated(QTreeWidgetItem *item) { if (it.value() == item) { - emit setCandidateMove(it.key(), nullptr); + const auto& key = it.key(); + emit setCandidateMove(&key, nullptr); break; } } @@ -106,7 +108,7 @@ void MoveBox::removeMove() } } - emit removeCandidateMoves(selectedMoves); + emit removeCandidateMoves(&selectedMoves); // TODO make this code work to select the next item QTreeWidgetItem *prevLastSelection = m_moveMap.value(selectedMoves.back()); @@ -130,7 +132,8 @@ void MoveBox::removeMove() { if (mapIt.value() == nextSelection) { - emit setCandidateMove(mapIt.key(), nullptr); + const auto& key = mapIt.key(); + emit setCandidateMove(&key, nullptr); break; } } @@ -232,9 +235,9 @@ void MoveBox::checkGeometry() m_treeWidget->resizeColumnToContents(PlayColumn); } -void MoveBox::positionChanged(const Quackle::GamePosition &position) +void MoveBox::positionChanged(const Quackle::GamePosition *position) { - if (m_rack.tiles() != position.currentPlayer().rack().tiles()) + if (m_rack.tiles() != position->currentPlayer().rack().tiles()) { for (auto& mapIt : m_moveMap) delete mapIt; @@ -242,13 +245,13 @@ void MoveBox::positionChanged(const Quackle::GamePosition &position) m_moveMap.clear(); } - m_rack = position.currentPlayer().rack(); - setMoves(position.moves(), position.moveMade()); + m_rack = position->currentPlayer().rack(); + setMoves(position->moves(), position->moveMade()); } -void MoveBox::movesChanged(const Quackle::MoveList &moves) +void MoveBox::movesChanged(const Quackle::MoveList *moves) { - setMoves(moves, m_previousSelection); + setMoves(*moves, m_previousSelection); } QTreeWidgetItem *MoveBox::createItem(const Quackle::Move &move) |