天天看點

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