setCursor() stops working after interacting with QMessageBox using space key
-
Hi everyone,
I am experiencing an issue where setCursor() stops working after interacting with a QMessageBox using the space key.
System Information:
- Qt Version: 6.8.2
- OS: macOS Sequoia 15.3.2
- Compiler: Apple clang version 16.0.0 (clang-1600.0.26.6)
Problem Description:
In my QGraphicsView-based application, I use setCursor() to change the cursor based on user interactions. Everything works fine until I open a QMessageBox.
- Everything works correctly if I click the message box buttons with the mouse.
- However, if I use the space key to interact with the message box, setCursor() stops working.
- Even after clicking on the graphics view again, changing the cursor programmatically no longer has any effect.
- The cursor only resets to the expected behavior if I move or resize the application window.
What I Have Tried:
- Using setCursor() and viewport()->setCursor() on QGraphicsView.
- Calling update(), repaint(), and viewport()->update() after setting the cursor.
- Forcing a cursor reset using unsetCursor() before setCursor().
- Setting the cursor on QApplication instead of QGraphicsView.
- Ensuring that focus is correctly set back to QGraphicsView after closing the QMessageBox.
None of these solutions have worked.
Question:
- Has anyone encountered this issue before?
- Is there a workaround to force setCursor() to work again after interacting with a QMessageBox via the space key?
Any help or suggestions would be greatly appreciated!
Thanks! -
Hi and welcome to devnet,
Are you using exec or open ?
If the former, can you test with the latter ? -
I am using confirmBox.exec() because I want the user to confirm before proceeding. The blocking behavior is intentional in this case.
However, I am also facing another issue with QGraphicsRectItem:
After zooming in or out, the hover event does not work in a ~10px area at the bottom edge of the RectItem. Additionally, setCursor does not take effect until I move the application window.
I suspect these issues might be related, but I donβt think they are caused by exec(). Do you have any insights on what might be happening?
-
wrt to the QGraphicsrectItem - any chance you hit bug https://bugreports.qt.io/browse/QTBUG-131893 ?
Please provide a minimal, compilable example to reproduce the problem. -
I've provided a minimal, compilable example to reproduce the issue. You can find it here:
π GitHub Repository: QGraphicsBugThe repository includes build instructions and a detailed Steps to Reproduce section in the README.
Would appreciate any insights or suggestions. Thanks!
-
I've noticed something interesting: If an action automatically triggers a QMessageBox, and I press Space to interact with it, the issue occurs. However, if I repeat the same action one more time, setCursor() starts working again.
This suggests that Qt's internal state might not be resetting correctly after the first QMessageBox interaction, but it somehow corrects itself on the second occurrence.
-
I can't reproduce it with Qt6.8.2 or Qt6.10 on windows with msvc.
-
Thanks for testing it!
I'm running this on macOS Sequoia 15.3.2 with Qt 6.8.2, using Apple Clang 16.0.0. The issue is consistently reproducible on my setup. This might be a macOS-specific issue.
Would it make sense to report this on Qt's bug tracker (bugreports.qt.io)?
-
Yes it would, I was able to reproduce the issue on Sonoma with a self built version of Qt.
Please provide your example directly in the bug report so it will keep things together.
-
I really appreciate you taking the time to look into this issue!
I have submitted the bug report to Qt's bug tracker and included the minimal example directly in the report. Here is the link for reference: QTBUG-135154
-
Thanks !
Please add a tar file with your project to the report. That way it's easier for people to work on this.
-
I am encountering similar problems with Linux Mint. I am new to Mint, new to Qt, my C++ is very rusty, and I don't do much GUI programming. I am surprised to find a problem that apparently isn't my fault.
I am porting a simple painting program (Stracian) from a Windows version I wrote 20-odd years ago. It uses a tablet. I started with the Tablet example (Qt/Examples/Qt-6.10.1/widgets/widgets).
Tablet has a problem like "the hover" problem. Moving the cursor slowly into the window from top, bottom, or right, does not change the cursor. Moving in quickly, or from the left works OK. Tablet does not have the child-dialog problem. In fact, you can restore the correct cursor by opening and closing the About dialog.
Stracian does not have the hover problem, but it does have the child-dialog problem. I can fix it by passing a null pointer as parent to the dialog, but I expect that has negative consequences elsewhere.
Tablet uses a QPixmap, Stracian does not. I have my own data structure for the image, which I convert to QImages for painting the window. I don't know if that's relevant, but I can't see other obvious differences between Tablet and Stracian.
I couldn't build the QGraphicsBug example:
[cmake] Running /home/graham/Qt/Tools/CMake/bin/cmake -S /home/graham/Desktop/QGraphicsBug -B /home/graham/Desktop/QGraphicsBug/build/Desktop-Debug2 in /home/graham/Desktop/QGraphicsBug/build/Desktop-Debug2.
[cmake] -- Qt Creator: QT_QMAKE_EXECUTABLE was not set. Qt MaintenanceTool cannot be used to install missing Qt modules that you specify in find_package(). To disable this message set QT_CREATOR_SKIP_MAINTENANCE_TOOL_PROVIDER to ON.
[cmake] -- Configuring incomplete, errors occurred!
[cmake] CMake Error at CMakeLists.txt:21 (find_package):
[cmake] By not providing "FindQt6.cmake" in CMAKE_MODULE_PATH this project has
[cmake] asked CMake to find a package configuration file provided by "Qt6", but
[cmake] CMake did not find one.
[cmake]
[cmake] Could not find a package configuration file provided by "Qt6" with any of
[cmake] the following names:
[cmake]
[cmake] Qt6Config.cmake
[cmake] qt6-config.cmake
.... -
I am encountering similar problems with Linux Mint. I am new to Mint, new to Qt, my C++ is very rusty, and I don't do much GUI programming. I am surprised to find a problem that apparently isn't my fault.
I am porting a simple painting program (Stracian) from a Windows version I wrote 20-odd years ago. It uses a tablet. I started with the Tablet example (Qt/Examples/Qt-6.10.1/widgets/widgets).
Tablet has a problem like "the hover" problem. Moving the cursor slowly into the window from top, bottom, or right, does not change the cursor. Moving in quickly, or from the left works OK. Tablet does not have the child-dialog problem. In fact, you can restore the correct cursor by opening and closing the About dialog.
Stracian does not have the hover problem, but it does have the child-dialog problem. I can fix it by passing a null pointer as parent to the dialog, but I expect that has negative consequences elsewhere.
Tablet uses a QPixmap, Stracian does not. I have my own data structure for the image, which I convert to QImages for painting the window. I don't know if that's relevant, but I can't see other obvious differences between Tablet and Stracian.
I couldn't build the QGraphicsBug example:
[cmake] Running /home/graham/Qt/Tools/CMake/bin/cmake -S /home/graham/Desktop/QGraphicsBug -B /home/graham/Desktop/QGraphicsBug/build/Desktop-Debug2 in /home/graham/Desktop/QGraphicsBug/build/Desktop-Debug2.
[cmake] -- Qt Creator: QT_QMAKE_EXECUTABLE was not set. Qt MaintenanceTool cannot be used to install missing Qt modules that you specify in find_package(). To disable this message set QT_CREATOR_SKIP_MAINTENANCE_TOOL_PROVIDER to ON.
[cmake] -- Configuring incomplete, errors occurred!
[cmake] CMake Error at CMakeLists.txt:21 (find_package):
[cmake] By not providing "FindQt6.cmake" in CMAKE_MODULE_PATH this project has
[cmake] asked CMake to find a package configuration file provided by "Qt6", but
[cmake] CMake did not find one.
[cmake]
[cmake] Could not find a package configuration file provided by "Qt6" with any of
[cmake] the following names:
[cmake]
[cmake] Qt6Config.cmake
[cmake] qt6-config.cmake
....@qtGraham Hi and welcome to devnet,
The error message is pretty strange...
One thing you can test is to build the example on the command line using theqt-cmakewrapper found in your Qt 6 installation. That should make the build easier to do.