Qt QWidget add menu bar

I want to add menu bar to my window (which is a QWidget instance), I searched on the Google and found that most articles are recommending to use QMainWindow instead of QWidget. Using QMainWindow is a good choice, but in my program the main window is based on QWidget and the code base is huge, so adding menu bar to QWidget is a better choice here.

First we need create a window (QWidget) and set its layout (we use QVBoxLayout here)

Then create a menu bar and add it to the VBox layout.

Now you will see a blank menu bar in your window

Next we need add some menus to our menu bar

addMenu function will take the parameter as menu name and return the menu as return value. We need keep the menu instances because we need add actions (menu items) to them.

In above code we create a QAction (menu item) with title “Exit”, and connect its “triggered” signal to exit function (sys.exit), it means when this menu item is clicked, the exit function will be called. Finally add this menu item to the “File” menu.

 

We can also connect QAction’s triggered signal to custom defined function

Here we add a “Redo” menu item under “Edit” menu. When user clicks “Redo”, a message box will be popped up saying “Redo will be performed”

 

Following is the complete code:

 

remove horizontal header of QTableView

QTableView will show the horizontal header and vertical header by default.

Now I want to use QTableView as a file list to show the files changed recently (I want to list more than one column, so QTableView is a better choice than QListView). we can use following code to remove the horizontal header:

PySide

c++

horizontalHeader() method will return the horizontal header which is an instance of QHeaderView class. Then call the hide method of QHeaderView class to hide the header.

QHeaderView class is inheriting QWidget class, so we can use hide method to make it invisible and use show method to make it visible. You can view the QWidget documentation here

PySide message box

When you want to display a warning message (like “File doesn’t exist”) to user, using message box is a good choice. Following code is how to create a message box in PySide:

QMessageBox is the message window class, it’s defined in PySide.QtGui module. setText method will set the information text, and exec_ method will display the message box and waiting for user’s operation.

pyside QTableView disable edit mode

In default the QTableView will enable edit mode if user double clicks a table cell.

Following code will disable the edit mode:

 

In some old versions of Qt, QAbstractView will be used instead of QAbstractItemView. But in all versions of PySide, QAbstractView is not defined so QAbstractItemView need be used.