• QT 创建主窗口 MainWindow 实例


    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_OBJECT
    public:
        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();
    }
    
    void
    MainWindow::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()));
    }
    
    void
    MainWindow::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);
    }
    
    
    void
    MainWindow::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()
    {
    }
    
    
    



     

  • 相关阅读:
    ps 玻璃效果
    svn 官方下载
    svn
    c# form 无标题
    app Inventor google 拖放手机代码块
    paas
    java 延迟
    c# 执行 cmd
    c # xml操作 (无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”)
    eclipse 安装插件 link方式
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648225.html
Copyright © 2020-2023  润新知