天天看点

Qt之主窗口设计——基于QMainWindow主窗口程序

<a href="http://images.cnblogs.com/cnblogs_com/hanzhaoxin/201211/201211242020422783.png"></a>

mainwindow.h

#ifndef MAINWINDOW_H  

#define MAINWINDOW_H  

#include &lt;QtGui&gt;  

class MainWindow : public QMainWindow  

{  

    Q_OBJECT  

public:  

    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);  

    ~MainWindow();  

    void createMenus();     //创建菜单  

    void createActions();   //创建动作  

    void createToolBars();  //创建工具栏  

public slots:  

    void sl_NewFile();  

    void sl_OpenFile();  

    void sl_SaveFile();  

    void sl_About();  

protected:  

    void loadFile(QString);  

private:  

    QMenu *fileMenu;  

    QMenu *editMenu;  

    QMenu *aboutMenu;  

    QToolBar *fileTool;  

    QToolBar *editTool;  

    QAction *fileOpenAction;  

    QAction *fileNewAction;  

    QAction *fileSaveAction;  

    QAction *exitAction;  

    QAction *copyAction;  

    QAction *cutAction;  

    QAction *pasteAction;  

    QAction *aboutAction;  

    QTextEdit *edtText;   

};  

#endif // MAINWINDOW_H  

mainwindow.cpp

#include "mainwindow.h"  

#include &lt;QTextStream&gt;  

#include &lt;QFile&gt;  

MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)  

    : QMainWindow(parent, flags)  

    setWindowTitle(tr("QMainWindow"));  

    edtText = new QTextEdit(this);  

    setCentralWidget(edtText);  

    createActions();  

    createMenus();  

    createToolBars();  

}  

MainWindow::~MainWindow()  

void MainWindow::createActions()  

    //"打开"动作  

    fileOpenAction = new QAction(QIcon("images/open.png"),tr("Open"),this);  

    fileOpenAction-&gt;setShortcut(tr("Ctrl+0"));  

    fileOpenAction-&gt;setStatusTip(tr("open a file"));  

    connect(fileOpenAction,SIGNAL(triggered()),this,SLOT(sl_OpenFile()));  

    //"新建"动作  

    fileNewAction = new QAction(QIcon("images/new.png"),tr("New"),this);  

    fileNewAction-&gt;setShortcut(tr("Ctrl+N"));  

    fileNewAction-&gt;setStatusTip(tr("new file"));  

    connect(fileNewAction,SIGNAL(triggered()),this,SLOT(sl_NewFile()));  

    //"保存"动作  

    fileSaveAction = new QAction(QIcon("images/save.png"),tr("Save"),this);  

    fileSaveAction-&gt;setShortcut(tr("Ctrl+S"));  

    fileSaveAction-&gt;setStatusTip(tr("save file"));  

    connect(fileSaveAction,SIGNAL(activated()),this,SLOT(sl_SaveFile()));  

    //"退出"动作  

    exitAction = new QAction(tr("Exit"),this);  

    exitAction-&gt;setShortcut(tr("Ctrl+Q"));  

    exitAction-&gt;setStatusTip(tr("exit"));  

    connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));  

    //"剪切"动作  

    cutAction = new QAction(QIcon("images/cut.png"),tr("cut"),this);  

    cutAction-&gt;setShortcut(tr("Ctrl+X"));  

    cutAction-&gt;setStatusTip("cut to clipboard");  

    connect(cutAction,SIGNAL(triggered()),this,SLOT(cut()));  

    //"复制"动作  

    copyAction = new QAction(QIcon("images/copy.png"),tr("copy"),this);  

    copyAction-&gt;setShortcut(tr("Ctrl+C"));  

    copyAction-&gt;setStatusTip("copy to clipboard");  

    connect(copyAction,SIGNAL(triggered()),this,SLOT(copy()));  

    //"粘贴"动作  

    pasteAction = new QAction(QIcon("images/paste.png"),tr("paste"),this);  

    pasteAction-&gt;setShortcut(tr("Ctrl+V"));  

    pasteAction-&gt;setStatusTip("paste clipboard to selection");  

    connect(pasteAction,SIGNAL(triggered()),this,SLOT(paste()));  

    //"关于"动作  

    aboutAction = new QAction(tr("About"),this);  

    connect(aboutAction,SIGNAL(triggered()),this,SLOT(sl_About()));  

void MainWindow::createMenus()  

    //文件菜单  

    fileMenu = menuBar()-&gt;addMenu(tr("File"));  

    fileMenu-&gt;addAction(fileNewAction);  

    fileMenu-&gt;addAction(fileOpenAction);  

    fileMenu-&gt;addAction(fileSaveAction);  

    fileMenu-&gt;addSeparator();  

    fileMenu-&gt;addAction(exitAction);  

    //编辑菜单  

    editMenu = menuBar()-&gt;addMenu(tr("Edit"));  

    editMenu-&gt;addAction(copyAction);  

    editMenu-&gt;addAction(cutAction);  

    editMenu-&gt;addAction(pasteAction);  

    //帮助菜单  

    aboutMenu = menuBar()-&gt;addMenu(tr("Help"));  

    aboutMenu-&gt;addAction(aboutAction);  

void MainWindow::createToolBars()  

    //文件工具栏  

    fileTool = addToolBar("File");  

    fileTool-&gt;addAction(fileNewAction);  

    fileTool-&gt;addAction(fileOpenAction);  

    fileTool-&gt;addAction(fileSaveAction);  

    fileTool-&gt;setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea);  

    fileTool-&gt;setMovable(false);  

    //编辑工具栏  

    editTool = addToolBar("Edit");  

    editTool-&gt;addAction(copyAction);  

    editTool-&gt;addAction(cutAction);  

    editTool-&gt;addAction(pasteAction);  

void MainWindow::sl_NewFile()  

    MainWindow *newWin = new MainWindow;  

    newWin-&gt;show();  

void MainWindow::sl_OpenFile()  

    QString fileName = QFileDialog::getOpenFileName(this);  

    if(!fileName.isEmpty())  

    {  

        if(edtText-&gt;document()-&gt;isEmpty())  

        {  

            loadFile(fileName);  

        }  

        else  

            MainWindow *newWin = new MainWindow;  

            newWin-&gt;show();  

            newWin-&gt;loadFile(fileName);  

    }  

void MainWindow::sl_SaveFile()  

void MainWindow::sl_About()  

void MainWindow::loadFile(QString fileName)  

    QFile file(fileName);  

    if(file.open(QIODevice::ReadOnly | QIODevice::Text))  

        QTextStream textStream(&amp;file);  

        while (!textStream.atEnd())  

            edtText-&gt;append(textStream.readLine());  

工具条是一个可移动的窗口,它可停靠的区域由QToolBar的allowAreas()函数决定的,它的参数包括:

Qt::LeftToolBarArea、Qt::RightToolBarArea、Qt::TopToolBarArea、Qt::BottomToolBarArea、Qt::AllToolBarArea.

(默认为Qt::AllToolBarArea,启动时默认出现于主窗口的顶部)。

setMovable()函数确定工具条的可移动性。默认参数为true,可移动。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/24/2786283.html,如需转载请自行联系原作者

下一篇: less