- GUI
- Windows API tutorial
- Introduction to Windows API
- Windows API main functions
- System functions in Windows API
- Strings in Windows API
- Date & time in Windows API
- A window in Windows API
- First steps in UI
- Windows API menus
- Windows API dialogs
- Windows API controls I
- Windows API controls II
- Windows API controls III
- Advanced controls in Windows API
- Custom controls in Windows API
- The GDI in Windows API
- PyQt4 tutorial
- PyQt5 tutorial
- Qt4 tutorial
- Introduction to Qt4 toolkit
- Qt4 utility classes
- Strings in Qt4
- Date and time in Qt4
- Working with files and directories in Qt4
- First programs in Qt4
- Menus and toolbars in Qt4
- Layout management in Qt4
- Events and signals in Qt4
- Qt4 Widgets
- Qt4 Widgets II
- Painting in Qt4
- Custom widget in Qt4
- The Breakout game in Qt4
- Qt5 tutorial
- Introduction to Qt5 toolkit
- Strings in Qt5
- Date and time in Qt5
- Containers in Qt5
- Working with files and directories in Qt5
- First programs in Qt5
- Menus and toolbars in Qt5
- Layout management in Qt5
- Events and signals in Qt5
- Qt5 Widgets
- Qt5 Widgets II
- Painting in Qt5
- Custom widget in Qt5
- Snake in Qt5
- The Breakout game in Qt5
- PySide tutorial
- Tkinter tutorial
- Tcl/Tk tutorial
- Qt Quick tutorial
- Java Swing tutorial
- JavaFX tutorial
- Java SWT tutorial
- wxWidgets tutorial
- Introduction to wxWidgets
- wxWidgets helper classes
- First programs in wxWidgets
- Menus and toolbars in wxWidgets
- Layout management in wxWidgets
- Events in wxWidgets
- Dialogs in wxWidgets
- wxWidgets widgets
- wxWidgets widgets II
- Drag and Drop in wxWidgets
- Device Contexts in wxWidgets
- Custom widgets in wxWidgets
- The Tetris game in wxWidgets
- wxPython tutorial
- Introduction to wxPython
- First Steps
- Menus and toolbars
- Layout management in wxPython
- Events in wxPython
- wxPython dialogs
- Widgets
- Advanced widgets in wxPython
- Drag and drop in wxPython
- Internationalisation
- Application skeletons in wxPython
- The GDI
- Mapping modes
- Creating custom widgets
- Tips and Tricks
- wxPython Gripts
- The Tetris game in wxPython
- C# Winforms Mono tutorial
- Java Gnome tutorial
- Introduction to Java Gnome
- First steps in Java Gnome
- Layout management in Java Gnome
- Layout management II in Java Gnome
- Menus in Java Gnome
- Toolbars in Java Gnome
- Events in Java Gnome
- Widgets in Java Gnome
- Widgets II in Java Gnome
- Advanced widgets in Java Gnome
- Dialogs in Java Gnome
- Pango in Java Gnome
- Drawing with Cairo in Java Gnome
- Drawing with Cairo II
- Nibbles in Java Gnome
- QtJambi tutorial
- GTK+ tutorial
- Ruby GTK tutorial
- GTK# tutorial
- Visual Basic GTK# tutorial
- PyGTK tutorial
- Introduction to PyGTK
- First steps in PyGTK
- Layout management in PyGTK
- Menus in PyGTK
- Toolbars in PyGTK
- Signals & events in PyGTK
- Widgets in PyGTK
- Widgets II in PyGTK
- Advanced widgets in PyGTK
- Dialogs in PyGTK
- Pango
- Pango II
- Drawing with Cairo in PyGTK
- Drawing with Cairo II
- Snake game in PyGTK
- Custom widget in PyGTK
- PHP GTK tutorial
- C# Qyoto tutorial
- Ruby Qt tutorial
- Visual Basic Qyoto tutorial
- Mono IronPython Winforms tutorial
- Introduction
- First steps in IronPython Mono Winforms
- Layout management
- Menus and toolbars
- Basic Controls in Mono Winforms
- Basic Controls II in Mono Winforms
- Advanced Controls in Mono Winforms
- Dialogs
- Drag & drop in Mono Winforms
- Painting
- Painting II in IronPython Mono Winforms
- Snake in IronPython Mono Winforms
- The Tetris game in IronPython Mono Winforms
- FreeBASIC GTK tutorial
- Jython Swing tutorial
- JRuby Swing tutorial
- Visual Basic Winforms tutorial
- JavaScript GTK tutorial
- Ruby HTTPClient tutorial
- Ruby Faraday tutorial
- Ruby Net::HTTP tutorial
- Java 2D games tutorial
- Java 2D tutorial
- Cairo graphics tutorial
- PyCairo tutorial
- HTML5 canvas tutorial
- Python tutorial
- Python language
- Interactive Python
- Python lexical structure
- Python data types
- Strings in Python
- Python lists
- Python dictionaries
- Python operators
- Keywords in Python
- Functions in Python
- Files in Python
- Object-oriented programming in Python
- Modules
- Packages in Python
- Exceptions in Python
- Iterators and Generators
- Introspection in Python
- Ruby tutorial
- PHP tutorial
- Visual Basic tutorial
- Visual Basic
- Visual Basic lexical structure
- Basics
- Visual Basic data types
- Strings in Visual Basic
- Operators
- Flow control
- Visual Basic arrays
- Procedures & functions in Visual Basic
- Organizing code in Visual Basic
- Object-oriented programming
- Object-oriented programming II in Visual Basic
- Collections in Visual Basic
- Input & output
- Tcl tutorial
- C# tutorial
- Java tutorial
- AWK tutorial
- Jetty tutorial
- Tomcat Derby tutorial
- Jtwig tutorial
- Android tutorial
- Introduction to Android development
- First Android application
- Android Button widgets
- Android Intents
- Layout management in Android
- Android Spinner widget
- SeekBar widget
- Android ProgressBar widget
- Android ListView widget
- Android Pickers
- Android menus
- Dialogs
- Drawing in Android
- Java EE 5 tutorials
- Introduction
- Installing Java
- Installing NetBeans 6
- Java Application Servers
- Resin CGIServlet
- JavaServer Pages, (JSPs)
- Implicit objects in JSPs
- Shopping cart
- JSP & MySQL Database
- Java Servlets
- Sending email in a Servlet
- Creating a captcha in a Servlet
- DataSource & DriverManager
- Java Beans
- Custom JSP tags
- Object relational mapping with iBATIS
- Jsoup tutorial
- MySQL tutorial
- MySQL quick tutorial
- MySQL storage engines
- MySQL data types
- Creating, altering and dropping tables in MySQL
- MySQL expressions
- Inserting, updating, and deleting data in MySQL
- The SELECT statement in MySQL
- MySQL subqueries
- MySQL constraints
- Exporting and importing data in MySQL
- Joining tables in MySQL
- MySQL functions
- Views in MySQL
- Transactions in MySQL
- MySQL stored routines
- MySQL Python tutorial
- MySQL Perl tutorial
- MySQL C API programming tutorial
- MySQL Visual Basic tutorial
- MySQL PHP tutorial
- MySQL Java tutorial
- MySQL Ruby tutorial
- MySQL C# tutorial
- SQLite tutorial
- SQLite C tutorial
- SQLite PHP tutorial
- SQLite Python tutorial
- SQLite Perl tutorial
- SQLite Ruby tutorial
- SQLite C# tutorial
- SQLite Visual Basic tutorial
- PostgreSQL C tutorial
- PostgreSQL Python tutorial
- PostgreSQL Ruby tutorial
- PostgreSQL PHP tutorial
- PostgreSQL Java tutorial
- Apache Derby tutorial
- SQLAlchemy tutorial
- MongoDB PHP tutorial
- MongoDB Java tutorial
- MongoDB JavaScript tutorial
- MongoDB Ruby tutorial
- Spring JdbcTemplate tutorial
- JDBI tutorial
Menus and toolbars in Qt4
In this part of the Qt4 C++ programming tutorial, we will talk about menus and toolbars in Qt4 applications.
A menubar is a common part of a GUI application. It is a group of commands located in various places called menus. Menus group commands that we can use in an application. Toolbars provide a quick access to the most frequently used commands.
Simple menu
The first example shows a simple menu.
simplemenu.h
#pragma once #include <QMainWindow> #include <QApplication> class SimpleMenu : public QMainWindow { public: SimpleMenu(QWidget *parent = 0); };
This is a header file for our code example.
simplemenu.cpp
#include "simplemenu.h" #include <QMenu> #include <QMenuBar> SimpleMenu::SimpleMenu(QWidget *parent) : QMainWindow(parent) { QAction *quit = new QAction("&Quit", this); QMenu *file; file = menuBar()->addMenu("&File"); file->addAction(quit); connect(quit, SIGNAL(triggered()), qApp, SLOT(quit())); }
We have a menubar, a menu and an action. In order to work with menus, we must inherit from a QMainWindow
widget.
QAction *quit = new QAction("&Quit", this);
This code line creates a QAction
. Each QMenu
has one or more action objects.
QMenu *file; file = menuBar()->addMenu("&File");
We create a QMenu
object.
file->addAction(quit);
We put an action inside the menu using the addAction()
method.
connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
When we select this option from the menu, the application quits.
main.cpp
#include "simplemenu.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); SimpleMenu window; window.resize(250, 150); window.setWindowTitle("Simple menu"); window.show(); return app.exec(); }
The main file.

Icons, shortcuts, and separators
In the following example, we will further enhance our previous application. We add icons to the menus, use shortcuts and a separator.
anothermenu.h
#pragma once #include <QMainWindow> #include <QApplication> class AnotherMenu : public QMainWindow { public: AnotherMenu(QWidget *parent = 0); };
The header file for the example.
anothermenu.cpp
#include "anothermenu.h" #include <QMenu> #include <QMenuBar> AnotherMenu::AnotherMenu(QWidget *parent) : QMainWindow(parent) { QPixmap newpix("new.png"); QPixmap openpix("open.png"); QPixmap quitpix("quit.png"); QAction *newa = new QAction(newpix, "&New", this); QAction *open = new QAction(openpix, "&Open", this); QAction *quit = new QAction(quitpix, "&Quit", this); quit->setShortcut(tr("CTRL+Q")); QMenu *file; file = menuBar()->addMenu("&File"); file->addAction(newa); file->addAction(open); file->addSeparator(); file->addAction(quit); qApp->setAttribute(Qt::AA_DontShowIconsInMenus, false); connect(quit, SIGNAL(triggered()), qApp, SLOT(quit())); }
In our example, we have one menu with three actions. Only the quit action will actually do something if we select it. We also create a separator and a CTRL+Q
shortcut, which terminates the application.
QPixmap newpix("new.png"); QPixmap openpix("open.png"); QPixmap quitpix("quit.png");
These are images that we use in menus. Note that some desktop environments might not display images in the menus.
QAction *newa = new QAction(newpix, "&New", this); QAction *open = new QAction(openpix, "&Open", this); QAction *quit = new QAction(quitpix, "&Quit", this);
In this code we use the QAction
constructor with a pixmap as the first argument.
quit->setShortcut(tr("CTRL+Q"));
Here we create a keyboard shortcut. By pressing this shortcut, we will run the quit action which will quit the application.
file->addSeparator();
We create a separator. The separator is a horizontal line which enables us to group menu actions into some logical groups.
qApp->setAttribute(Qt::AA_DontShowIconsInMenus, false);
In some environments, the menu icons are not shown by default. In this case we can disable the Qt::AA_DontShowIconsInMenus
attribute.
main.cpp
#include "anothermenu.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); AnotherMenu window; window.resize(350, 200); window.move(300, 300); window.setWindowTitle("Another menu"); window.show(); return app.exec(); }
This is the main file.

Checkable menu
In the next example, we create a checkable menu. This will be an action with a check box. The option toggles the visibility of a statusbar.
checkable.h
#pragma once #include <QMainWindow> #include <QApplication> class Checkable : public QMainWindow { Q_OBJECT public: Checkable(QWidget *parent = 0); private slots: void toggleStatusbar(); private: QAction *viewst; };
The header file for the example.
checkable.cpp
#include "checkable.h" #include <QMenu> #include <QMenuBar> #include <QStatusBar> Checkable::Checkable(QWidget *parent) : QMainWindow(parent) { viewst = new QAction("&View statusbar", this); viewst->setCheckable(true); viewst->setChecked(true); QMenu *file; file = menuBar()->addMenu("&File"); file->addAction(viewst); statusBar(); connect(viewst, SIGNAL(triggered()), this, SLOT(toggleStatusbar())); } void Checkable::toggleStatusbar() { if (viewst->isChecked()) { statusBar()->show(); } else { statusBar()->hide(); } }
A checkable menu item toggles the visibility of the statusbar.
viewst = new QAction("&View statusbar", this); viewst->setCheckable(true); viewst->setChecked(true);
We create an actiona and make it checkable with the setCheckable()
method. The setChecked()
method makes it checked.
if (viewst->isChecked()) { statusBar()->show(); } else { statusBar()->hide(); }
Inside the toggleStatusbar()
method, we determine if the menu item is checked and hide or show the statusbar accordingly.
main.cpp
#include "checkable.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Checkable window; window.resize(250, 150); window.setWindowTitle("Checkable menu"); window.show(); return app.exec(); }
This is the main file.

QToolBar
The QToolBar
class provides a movable panel that contains a set of controls which provide a quick access to the application actions.
toolbar.h
#pragma once #include <QMainWindow> #include <QApplication> class Toolbar : public QMainWindow { Q_OBJECT public: Toolbar(QWidget *parent = 0); };
The header file for the example.
toolbar.cpp
#include "toolbar.h" #include <QToolBar> #include <QIcon> #include <QAction> Toolbar::Toolbar(QWidget *parent) : QMainWindow(parent) { QPixmap newpix("new.png"); QPixmap openpix("open.png"); QPixmap quitpix("quit.png"); QToolBar *toolbar = addToolBar("main toolbar"); toolbar->addAction(QIcon(newpix), "New File"); toolbar->addAction(QIcon(openpix), "Open File"); toolbar->addSeparator(); QAction *quit = toolbar->addAction(QIcon(quitpix), "Quit Application"); connect(quit, SIGNAL(triggered()), qApp, SLOT(quit())); }
To create a toolbar, we inherit from the QMainWindow
widget.
QToolBar *toolbar = addToolBar("main toolbar");
The addToolBar()
method creates a toolbar and returns a pointer to it.
toolbar->addAction(QIcon(newpix), "New File"); toolbar->addAction(QIcon(openpix), "Open File"); toolbar->addSeparator();
Here we add two actions and a separator to the toolbar.
main.cpp
#include "toolbar.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Toolbar window; window.resize(300, 200); window.setWindowTitle("QToolBar"); window.show(); return app.exec(); }
This is the main file.

Application skeleton
In the end of this part of the C++ Qt4 tutorial, we will create an application skeleton. The example is based mainly on the QMainWindow
widget.
skeleton.h
#pragma once #include <QMainWindow> #include <QApplication> class Skeleton : public QMainWindow { Q_OBJECT public: Skeleton(QWidget *parent = 0); };
The header file for the example.
skeleton.cpp
#include "skeleton.h" #include <QToolBar> #include <QIcon> #include <QAction> #include <QMenu> #include <QMenuBar> #include <QStatusBar> #include <QTextEdit> Skeleton::Skeleton(QWidget *parent) : QMainWindow(parent) { QPixmap newpix("new.png"); QPixmap openpix("open.png"); QPixmap quitpix("quit.png"); QAction *quit = new QAction("&Quit", this); QMenu *file; file = menuBar()->addMenu("&File"); file->addAction(quit); connect(quit, SIGNAL(triggered()), qApp, SLOT(quit())); QToolBar *toolbar = addToolBar("main toolbar"); toolbar->addAction(QIcon(newpix), "New File"); toolbar->addAction(QIcon(openpix), "Open File"); toolbar->addSeparator(); QAction *quit2 = toolbar->addAction(QIcon(quitpix), "Quit Application"); connect(quit2, SIGNAL(triggered()), qApp, SLOT(quit())); QTextEdit *edit = new QTextEdit(this); setCentralWidget(edit); statusBar()->showMessage("Ready"); }
Here we create a menu a toolbar and a statusbar.
QTextEdit *edit = new QTextEdit(this); setCentralWidget(edit);
We create a QTextEdit
widget and place it into the central part of the QMainWindow
widget.
main.cpp
#include "skeleton.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Skeleton window; window.resize(350, 250); window.setWindowTitle("Application skeleton"); window.show(); return app.exec(); }
This is the main file.

In this part of the Qt4 tutorial, we have covered menus and toolbars.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论