这几天不写学习总结好像缺少了什么,心里有点不踏实。想想还是动动手,写个学习总结吧。创建主窗口从何下手呢??面对长长的代码,似乎一点头晕。面对这个情况,还不如静下心来寻找突破点~,能把主窗口创建好也有它们的先后顺序。创建主窗口包含下面这些内容:(1)子类化QMainWindow(2)创建菜单和工具栏(3)设置状态栏(4)实现File菜单(5)使用对话框(6)存储设置(7)多文档(8)程序启动画面
那个简单的例子先实现前三个功能先吧。创建子类化QMainWindow、创建菜单和工具栏、设置状态栏…..
实现创建子类化QMainWindow,创建一个便于自己识别的目录,我这里定义一个工程名为spreadsheet目录,为空工程项目。
找到左边的创建的spreadsheet项目文件,点击鼠标右键,弹出菜单列表,选择添加新项,弹出新项对话框,默认单选项是创建源文件,文件名定义为mainwindow.cpp,然后选择创建的项目的目录/root/spreadsheet,点击确定。在点击是,在同一个位置上创建头文件。
接着以同样的方式创建主函数源文件,这次可以不在同一位上创建main.cpp源文件的头文件。点击否
先定义主函数,然后定义基本的框架以后,创建一个主窗口构造函数对象,然后将它主窗口部件显示出来
定义一个继承公共的主窗口部件
MainWindow
的类,在公共主窗口中,声明一个公共
MainWindow
构造函数,定义一个
QMdiArea
对象类,
QMdiArea
部件提供了一个
MDI
窗口,其中显示面积。定义一个私有的
QMdiArea
指针。
声明类初始化的头文件,接着声明继承构造函数
MainWindow
,在继承的
MainWindow
()函数中将
mdiArea
设置为中央窗口部件
声明创建一个私有动作函数,再声明一个
QAction
动作类,然后设置
QAction
动作
File
菜单栏下的动作指针
,
如:新建、打开、保存、另存为、退出等等。
要用到构造函数
MainWindow
的定义创造动作的函数,要先声明。当点击
File
菜单下的动作的时候,就会找到构造函数,然后找到动作函数具体声明,接着连接信号与槽实现对应的功能。在字符串的周围的
tr()
函数的调用是把它们翻译成其他语言的标记。使用“与”操作的符号“
&
”来表示快捷键。可以用来控制焦点快捷键标签,如
:
新建
(Ctrl+N)
、打开
(Ctrl+O)
等等。
this
指的是对象
.
然后调用
setShortcut()
函数
,
将快捷键显示出来。
设置好动作后,重新构建,启动程序是弹出出来看不到效果,要添加一个菜单栏,将动作显示出来。在mainwindow.h头文件中,声明一个菜单类,定义一个File菜单指针。创建一个创建菜单的函数
接着在构造函数中声明创建菜单函数,接着声明createMenu()创建菜单函数是重构造函数中来的,在创建函数中实现File菜单功能,菜单栏中增加一个菜单快捷键File,在File菜单栏中增加一些动作
做完以后重新构建,启动程序。可以看到效果了
实现工具栏也是一样的方法,在
mainwindow.h
头文件中声明
QToolBar
工具栏类,在声明一个私有的创建工具状态函数
createToolBars()
说到工具栏大伙都非常熟悉,最明显的特征是用图标显示指定的功能。所有要定义一个资源,在
spreadsheet
工程目录中添加资源,资源以
.qrc
结尾。应用资源时,就像下面定义,指定用
p_w_picpaths
目录下的图标。装图标资源的
p_w_picpaths
目录要复制到
spreadsheet
工程目录
.
在资源文件说明引用p_w_picpaths下资源以后,转到mainwindow.cpp源文件,应用资源图标用”:/”声明工具栏函数中,创建一个工具栏,接着将工具栏动作添加进去,重新构建,启动程序。可以看到工具栏的运行效果了
最后实现状态栏的功能,添加一个标签窗口部件显示指定状态栏的信息。创建一个状态栏函数。
在主函数显示状态栏函数的功能,在状态栏中添加一个标签窗口部件。用来显示状态栏的信息。
重新构建,检查一下最后的成果吧
#ifndef __MAINWINDOW_H__
#define __MAINWINDOW_H__
#include <QMainWindow>
class QMdiArea;
class QAction;
class QMenu;
class QToolBar;
class QLabel;
// place your code here
class MainWindow:public QMainWindow
{
public:
MainWindow();
private:
void createActions();
void createMenus();
void createToolBars();
void createStatusBar();
QMenu *fileMenu;
QToolBar *fileToolBar;
QMdiArea *mdiArea;
QLabel *readyLabel;
QAction *newAction;
QAction *openAction;
QAction *saveAction;
QAction *saveAsAction;
QAction *exitAction;
};
#endif // __MAINWINDOW_H__
#include "mainwindow.h"
#include <QtGui>
MainWindow::MainWindow()
{
mdiArea = new QMdiArea;
setCentralWidget(mdiArea);
createActions();
createMenus();
createToolBars();
createStatusBar();
setWindowTitle(tr("MDI Editor"));
}
// place your code here
void MainWindow::createActions()
{
newAction = new QAction(tr("&New"), this);
newAction->setShortcut(QKeySequence::New);
newAction->setIcon(QIcon(":/p_w_picpaths/new.png"));
newAction->setStatusTip(tr("Create a new file"));
openAction = new QAction(tr("&Open..."), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setIcon(QIcon(":/p_w_picpaths/open.png"));
openAction->setStatusTip(tr("Open an existing file"));
saveAction = new QAction(tr("&Save"), this);
saveAction->setShortcut(QKeySequence::Save);
saveAction->setIcon(QIcon(":/p_w_picpaths/save.png"));
saveAction->setStatusTip(tr("Save the file to disk"));
saveAsAction = new QAction(tr("Save &As..."), this);
saveAsAction->setStatusTip(tr("Save the file under a new name"));
exitAction = new QAction(tr("E&xit"), this);
exitAction->setShortcut(tr("Ctrl+Q"));
exitAction->setStatusTip(tr("Exit the application"));
}
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
void MainWindow::createMenus()
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAction);
fileMenu->addAction(openAction);
fileMenu->addAction(saveAction);
fileMenu->addAction(saveAsAction);
fileMenu->addSeparator();
fileMenu->addAction(exitAction);
}
void MainWindow::createToolBars()
{
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAction);
fileToolBar->addAction(openAction);
fileToolBar->addAction(saveAction);
}
void MainWindow::createStatusBar()
{
readyLabel = new QLabel(tr(" Ready"));
statusBar()->addWidget(readyLabel, 1);
}
#include <QApplication>
#include "mainwindow.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
MainWindow mainWin;
mainWin.show();
return app.exec();
}
呵呵。最后我想说,其实实现这些功能也没有想象中的那么难。关键要勤动手试,多思考。
转载于:https://blog.51cto.com/chenboqiang/321176