3)菜单栏内部是一系列命令。在Qt中为了使菜单项和工具栏的命令有一致性,使用action来表示这些命令。因此Qt菜单就是用一系列QAction对象构成的列表,菜单栏包含一系列的菜单
4、状态栏
1)状态栏是包含文本输出窗格或者“指示器”的控制条
2)状态栏位于每个窗口的最底端
3)状态栏可以添加Qt窗口部件
4)一个主窗口最多只有一个状态栏
5、中心部件
主窗口的中心,一个主窗口只有一个中心部件。主窗口有自己的布局管理器,因此不能再给主窗口设置布局,但是可以给中心部件设置布局
三、创建主窗口
纯代码创建
1、头文件
头文件中应该具备的资源:
菜单栏:QMenu *fileMenu, *editMenu, *helpMenu
工具栏:QToolBar *fileToolBar, *editToolBar
状态栏:QStatusBar
中心部件
锚接部件 dock
动作:QAction *openAction, *newAction, *saveAction, *exitAction
动作:QAction *copyAction, *cutAction, *pasteAction,
动作:QAction *aboutAction
槽函数:openSlot(), saveSlot(), newSlot(), aboutSlot()
私有函数:
void createActions()
void createMenus()
void createToolBar();
void setStatusBar();
2、资源文件
application.qrc
images/open.png
images/copy.png
images/cut.png
images/paste.png
3、createAction
//创建动作
openAction = new QAction( QIcon(":/images/open.png"),
tr("打开"), //防止乱码
this
);
//设置快捷键
1)openAction->setShortcuts(QKeySequence::Open)
2)openAction->setShortcut(QKeySequence(tr("Ctrl+o")))
3)openAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O))
//设置状态栏信息
openAction->setStatusTip(tr("打开"))
//关联信号和槽函数
connect(openAction, SIGNAL(triggered()), this, SLOT(openSlot()))
4、createrMenus
menuBar()可以获得菜单栏的指针
//添加菜单
fileMenu = menuBar()->addMenu(tr("文件"));
//为菜单添加活动
fileMenu->addAction(openAction);
//添加分割线
menuBar()->addSeparator();
5、createrToolBar
QMainWindow::addToolBar()函数可以创建工具栏
//添加工具栏
fileToolBar = addToolBar(tr("文件"))
//给工具栏添加动作
fileToolBar->addAction(openAction)
6、statusBar
statusBar()函数可以获取状态栏的指针
statusBar()->showMessage(tr("准备"));
7、中心部件
setCentralWidget(textEdit)
8、锚接部件
锚接窗口简单的说就是一个可以“四处移动”的活动窗口
工具栏是锚接窗口的子类,所以一切适用于锚接窗口的函数都适用于工具栏
用户可以将锚接窗口摆放在锚接区域的任意有效位置,可以在代码中指定锚接窗口所处的位置:
添加锚接窗口:
//创建锚接窗口
QDockWidget dock = new QDockWidget(tr("name"), this)
//向锚接窗口里面添加控件
dock->setWidget(textEdit)
//将锚接窗口加载到主窗口
addDockWidget(Qt::LeftDockWidgetArea, dock)
//也可以将锚接部件移除
removeDockWidget(dock);
四、源代码
资源文件
-
<!DOCTYPE RCC><RCC version="1.0">
-
<qresource>
-
<file>images/open.png</file>
-
<file>images/copy.png</file>
-
<file>images/cut.png</file>
-
<file>images/paste.png</file>
-
</qresource>
-
</RCC>
头文件
-
#ifndef MAINWINDOW_H
-
#define MAINWINDOW_H
-
-
#include <QtGui>
-
class mainWindow : public QMainWindow
-
{
-
Q_OBJECT
-
public:
-
mainWindow();
-
private slots:
-
void openSlot();
-
void saveSlot();
-
void exitSlot();
-
-
private:
-
QMenu *fileMenu;
-
QMenu *editMenu;
-
QMenu *helpMenu;
-
-
QToolBar *fileToolBar, *editToolBar;
-
-
QTextEdit *textEdit, *text;
-
-
QAction *openAct, *saveAct, *exitAct;
-
QAction *cutAct, *copyAct, *pasteAct;
-
QAction *aboutAct;
-
-
QDockWidget *dock;
-
-
void createActions();
-
void createMenus();
-
void createToolBar();
-
void setStatusBar();
-
void createDockWidget();
-
-
-
};
-
-
#endif
mainWindow.cpp
-
#include "mainWindow.h"
-
-
mainWindow::mainWindow()
-
{
-
setWindowTitle("haha");
-
textEdit = new QTextEdit();
-
//设置中心部件
-
setCentralWidget(textEdit);
-
//创建动作
-
createActions();
-
//创建菜单
-
createMenus();
-
//创建工具条
-
createToolBar();
-
//设置状态栏
-
setStatusBar();
-
//创建锚接部件
-
createDockWidget();
-
}
-
-
void mainWindow::openSlot()
-
{
-
-
}
-
void mainWindow::saveSlot()
-
{
-
-
}
-
void mainWindow::exitSlot()
-
{
-
-
}
-
-
void mainWindow::createActions()
-
{
-
//创建QAction(资源,名字,父窗口)
-
openAct = new QAction(QIcon(":/images/open.png"), tr("打开"), this);
-
//快捷键
-
openAct->setShortcut(QKeySequence(tr("ctrl+o")));
-
//设置状态栏提示
-
openAct->setStatusTip(tr("打开文件"));
-
//关联信号和槽函数
-
connect(openAct,SIGNAL(triggered()), this, SLOT(openSlot()));
-
-
}
-
void mainWindow::createMenus()
-
{
-
//添加菜单
-
fileMenu = menuBar()->addMenu(tr("文件"));
-
//为菜单添加动作
-
fileMenu->addAction(openAct);
-
}
-
void mainWindow::createToolBar()
-
{
-
//添加工具栏
-
fileToolBar = addToolBar(tr("文件"));
-
//为工具栏添加动作
-
fileToolBar->addAction(openAct);
-
}
-
void mainWindow::setStatusBar()
-
{
-
//设置状态栏信息
-
statusBar()->showMessage(tr("准备"));
-
}
-
void mainWindow::createDockWidget()
-
{
-
//创建锚接部件
-
dock = new QDockWidget(tr("锚接窗口"), this);
-
//向锚接部件添加控件
-
text = new QTextEdit();
-
dock->setWidget(text);
-
//将锚接部件加到主窗口
-
addDockWidget(Qt::RightDockWidgetArea, dock);
-
}
main.cpp
-
#include "mainWindow.h"
-
#include <QApplication>
-
-
int main(int argc, char *argv[])
-
{
-
//设置编码,防止汉字出现乱码
-
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
-
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
-
QApplication app(argc, argv);
-
-
mainWindow win;
-
win.show();
-
-
return app.exec();
-
}
结果