标签:
1. 主窗口的概念
(1)主窗口是与用户进行长时间交互的顶层窗口
(2)程序的绝大多数功能直接由主窗口提供
(3)主窗口通常是应用程序启动后显示的第一个窗口
(4)整个程序由一个主窗口和多个对话框组成
2. Qt中的主窗口
(1)Qt开发平台中直接支持主窗口的概念
(2)QMainWindow是Qt中主窗口的基类
(3)QMainWindow继承于QWidget是一种容器类型的组件
3. QMainWindow中封装的秘密
(1)菜单栏(2)工具栏(3)中心组件(4)停靠组件(5)状态栏
4. QMainWindow中的组件布局
5. 主窗口中的菜单
(1)Qt提供与菜单相关的类组件
(2)在Qt主窗口中创建菜单
QMenuBar* mb = menuBar(); //QMainWidow的成员函数 QMenu* menu = new QMenu("File(&F)"); QAction* action = new QAction("New",NULL); menu->addAction(action); //将action加入菜单项中 mb->addMenu(menu); //将菜单项加入MenuBar中
【编程实验】主窗口中创建菜单
//NotePad.pro
#------------------------------------------------- # # Project created by QtCreator 2016-07-31T21:11:03 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = NotePad TEMPLATE = app SOURCES += main.cpp MainWindow.cpp HEADERS += MainWindow.h
//main.cpp
#include "MainWindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow* w = MainWindow::NewInstance(); int ret = -1; if(w != NULL) { w->show(); ret = a.exec(); } return ret; }
//MainWindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMenuBar> //#include <QKeySequence> //#include <QAction> class MainWindow : public QMainWindow { Q_OBJECT private: //将构造函数、复制构造、赋值函数等私有化 MainWindow(QWidget *parent = 0); MainWindow(const MainWindow&); MainWindow& operator= (const MainWindow&); bool construct(); //二阶构造模式 //菜单栏的初始化 bool initMenuBar(); //文件(下拉)菜单 bool initFileMenu(QMenuBar* mb); //生成菜单项 bool makeAction(QAction*& action, QString text, int key); public: static MainWindow* NewInstance(); ~MainWindow(); }; #endif // MAINWINDOW_H
//MainWindow.cpp
#include "MainWindow.h" #include <QMenu> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { } //二阶构造中的第2阶构造 bool MainWindow::construct() { bool ret = true; ret = ret && initMenuBar(); return ret; } MainWindow* MainWindow::NewInstance() { MainWindow* ret = new MainWindow(); if((ret == NULL) || !ret->construct()) { delete ret; ret = NULL; } return ret; } //初始化菜单栏 bool MainWindow::initMenuBar() { bool ret = true; QMenuBar* mb = menuBar(); //menuBar为QMainWindow的成员变量 ret = ret && initFileMenu(mb); return ret; } //文件(下拉)菜单 bool MainWindow::initFileMenu(QMenuBar* mb) { QMenu* menu = new QMenu("File(&F)"); bool ret = (menu != NULL); if ( ret ) { QAction* action = NULL; //"新建"菜单项 ret = ret && makeAction(action, "New(N)",Qt::CTRL + Qt::Key_N); if(ret) { menu->addAction(action); //add Action to Menu Item } //水平分隔线 menu->addSeparator(); //"退出"菜单项 ret = ret && makeAction(action, "Exit(X)",Qt::CTRL + Qt::Key_X); if(ret) { menu->addAction(action); //add Action Item to Menu } } if ( ret ) { mb->addMenu(menu); //add Menu to Menu Bar } else { delete menu; } return ret; } //生成菜单项(第1个参数是菜单项对象,第2个参数为显示文本,第3个参数为快捷键) bool MainWindow::makeAction(QAction*& action, QString text, int key) { bool ret = true; action = new QAction(text,NULL); if(action != NULL) { action->setShortcut(QKeySequence(key)); //设置快捷键 } else { ret = false; } return ret; } MainWindow::~MainWindow() { }
(3)快捷键设置: action->setShortcut(QKeySequence(key));
①QKeySequence:Qt中与快捷键相关的类
②Key:Qt中代表键值的常量(如Ctrl+N的常量值为Qt::CTRL + Qt::Key_N)
6. 小结
(1)主窗口是与用户进行长时间交互的顶层窗口
(2)主窗口通常是应用程序启动后显示的第一个窗口
(3)QMainWindow是Qt是主窗口的基类
(4)QMainWindow是一种容器类型的窗口组件
(5)QMainWindow中封装了菜单栏、工具栏、状态栏等组件
标签:
原文地址:http://www.cnblogs.com/5iedu/p/5723890.html