QStatusBar message disappears on menu hover

pyqt4, python, qt, qt4

Solution

Basically, each widget you hover over sets the status bar text to their `statusTip` property even when that property is an empty string.

For `QMenu`, the text is stored in the `menuAction` action status tip, so, you can have a text instead of just clearing the status bar with something like this:

self.fileMenu.menuAction().setStatusTip("File Menu is hovered")

To prevent anything to change the status bar, you can probably install an `eventFilter` on the status bar and filter out all `QStatusTipEvent`.

Problem

I have a very basic `QMainWindow` application that contains a `menubar` and a `statusbar`. When I hover over the menu the status message disappears. More precisely, the status message is cleared. I have no idea what is causing this behavior but it's resulting in a very difficult workaround for what I hoped to be trivial behavior. This is problematic for the following reason: I can make the message permanent by adding a `QLabel` widget to the `QStatusBar`, but then I get the awkward border. I don't want the border. The only way I know how to remove the border is via `QStatusBar.setStyleSheet()`. I am using a palette for my color scheme as opposed to a stylesheet so modifying the stylesheet messes up other colors. I also can't restore the original `statusBar QLabel` color when I make a modification via the stylesheet. I'm not the best at using stylesheets. Is there a way to prevent the menu interaction from clearing the status message? If not, is there a way to remove the border from the StatusBar when adding a QLabel widget while preserving my palette (maybe not via stylesheets)? ``` #!/usr/bin/env python import sys from PyQt4.QtCore import * from PyQt4.QtGui import * class win(QMainWindow): def __init__(self,parent=None): super(win,self).__init__(parent) self.menubar = QMenuBar(self) self.fileMenu = QMenu("File") self.exitAction = QAction("Exit",self) self.fileMenu.addAction(self.exitAction) self.menubar.addMenu(self.fileMenu) self.statusBar().showMessage("Hello") self.connect(self.exitAction,SIGNAL("triggered()"), self.close) if __name__ == "__main__": app = QApplication(sys.argv) GUI = win() GUI.show() app.exec_() ```

Original source