QT 创建主窗口 MainWindow 实例

来源:互联网 发布:php求素数 编辑:程序博客网 时间:2024/05/01 02:54

1.

 

2. mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QWorkspace>#include <QMdiArea>#include <QMdiSubWindow>class QAction;class QMenu;class QToolBar;class QTextEdit;class MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow();    void createMenus();    void createActions();    void createToolBars();    void loadFile(QString fileName);public slots:    void slotNewFile();    void slotOpenFile();    void slotSaveFile();    void slotCopy();    void slotCut();    void slotPaste();    void slotAbout();protected:    //void closeEvent(QCloseEvent *);private:    QTextCodec *codec;    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 * text;    QWorkspace *workSpace;};#endif // MAINWINDOW_H

 

3. mainwindow.cpp

MainWindow构造函数中可加入 setAttribute(Qt::WA_DeleteOnClose);

多窗口时关闭窗口默认是隐藏,这样设置后为关闭,防止内存泄露。

 

#include "mainwindow.h"#include <QtGui>// 翋敦諳妗珋MainWindow::MainWindow(){    setWindowTitle(tr("myMainWindow"));    text = new QTextEdit(this);    setCentralWidget(text);        /*    workSpace = new QWorkspace;    setCentralWidget(workSpace);    QMainWindow *window1 = new QMainWindow;    window1->setWindowTitle("window1");    QTextEdit *text1 = new QTextEdit;    text1->setText("text1");    window1->setCentralWidget(text1);    workSpace->addWindow(window1);*/    createActions();    createMenus();    createToolBars();}voidMainWindow::createActions(){    // file open action    fileOpenAction = new QAction(QIcon(":/images/open.png"),tr("Open"),this);// 湖羲恅璃    fileOpenAction->setShortcut(tr("Ctrl+O"));    fileOpenAction->setStatusTip(tr("open a file"));    connect(fileOpenAction,SIGNAL(triggered()),this,SLOT(slotOpenFile()));    // file new action    fileNewAction = new QAction(QIcon(":/images/new.png"),tr("New"),this);// 陔膘恅璃    fileNewAction->setShortcut(tr("Ctrl+N"));    fileNewAction->setStatusTip(tr("new file"));    connect(fileNewAction,SIGNAL(triggered()),this,SLOT(slotNewFile()));    // save file action    fileSaveAction = new QAction(QPixmap(":/images/save.png"),tr("Save"),this);// 悵湔恅璃    fileSaveAction->setShortcut(tr("Ctrl+S"));    fileSaveAction->setStatusTip(tr("save file"));    connect(fileSaveAction,SIGNAL(activated()),this,SLOT(slotSaveFile()));    // exit action    exitAction = new QAction(tr("Exit"), this);// 豖堤    exitAction->setShortcut(tr("Ctrl+Q"));    exitAction->setStatusTip(tr("exit"));    connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));    cutAction = new QAction(QIcon(":/images/cut.png"), tr("Cut"), this);// 熟    cutAction->setShortcut(tr("Ctrl+X"));    cutAction->setStatusTip(tr("cut to clipboard"));    connect(cutAction, SIGNAL(triggered()), text, SLOT(cut()));    copyAction = new QAction(QIcon(":/images/copy.png"), tr("Copy"), this);// 葩秶    copyAction->setShortcut(tr("Ctrl+C"));    copyAction->setStatusTip(tr("copy to clipboard"));    connect(copyAction, SIGNAL(triggered()), text, SLOT(copy()));    pasteAction = new QAction(QIcon(":/images/paste.png"), tr("Paste"), this);// 梜泂    pasteAction->setShortcut(tr("Ctrl+V"));    pasteAction->setStatusTip(tr("paste clipboard to selection"));    connect(pasteAction, SIGNAL(triggered()), text, SLOT(paste()));    aboutAction = new QAction(tr("About"), this);// 壽衾    connect(aboutAction, SIGNAL(triggered()), this, SLOT(slotAbout()));}voidMainWindow::createMenus(){    fileMenu = menuBar()->addMenu(tr("File"));    editMenu = menuBar()->addMenu(tr("Edit"));    aboutMenu = menuBar()->addMenu(tr("Help"));    fileMenu->addAction(fileNewAction);    fileMenu->addAction(fileOpenAction);    fileMenu->addAction(fileSaveAction);    fileMenu->addAction(exitAction);    editMenu->addAction(copyAction);    editMenu->addAction(cutAction);    editMenu->addAction(pasteAction);    aboutMenu->addAction(aboutAction);}voidMainWindow::createToolBars(){    fileTool = addToolBar(tr("File"));    fileTool->setMovable(false);    editTool = addToolBar(tr("Edit"));    fileTool->addAction(fileNewAction);    fileTool->addAction(fileOpenAction);    fileTool->addAction(fileSaveAction);    editTool->addAction(copyAction);    editTool->addAction(cutAction);    editTool->addAction(pasteAction);}void MainWindow::slotNewFile(){    MainWindow *newWin = new MainWindow();    newWin->show();}void MainWindow::loadFile(QString fileName){    QFile file( fileName );    if ( file.open (QIODevice::ReadOnly | QIODevice::Text))    {        QTextStream textStream( &file );        while( !textStream.atEnd() )        {            text->append( textStream.readLine() );        }    }}void MainWindow::slotOpenFile(){    QString fileName = QFileDialog::getOpenFileName(this);    if ( !fileName.isEmpty() )    {        if( text->document()->isEmpty() )            loadFile(fileName);        else        {            MainWindow *newWin = new MainWindow;            newWin->show();            newWin->loadFile(fileName);        }    }}void MainWindow::slotSaveFile(){}void MainWindow::slotCopy(){}void MainWindow::slotCut(){}void MainWindow::slotPaste(){}void MainWindow::slotAbout(){}



 

原创粉丝点击