Qt实现基本QMainWindow主窗口程序

这个实验用Qt实现基本QMainWindow主窗口

先上实验效果图

    

打开一个文件,读取文件类容

详细步骤:

1.打开Qt creator新建MainWindow工程

右键工程名添加新文件,main文件,后缀自动补全后为main.cpp

选中工程,再次右键,选择模板的时候选择C++类,添加一个MainWindow类,该类继承字QMainWindow

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QAction>
#include <QMenu>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QToolBar>
#include <QTextEdit>
#include <QMainWindow>
#include <QString>
#include <QMenuBar>


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void createMenus();
    void createActions();
    void createToolBars();
    void loadFile(QString fileName);

public slots:
    void slotNewFile();
    void slotOpenFile();
    void slotSaveFile();

private:


    QMenu *fileMenu;
    QMenu *editMenu;
    QMenu *aboutMenu;
    QString fileName;

    QToolBar *fileTool;
    QToolBar *editTool;

    QAction *fileOpenAction;
    QAction *fileNewAction;
    QAction *fileSaveAction;
    QAction *exitAction;
    QAction *copyAction;
    QAction *cutAction;
    QAction *pasteAction;
    QAction *aboutAction;

    QTextEdit *text;


};

#endif // MAINWINDOW_H
#include "mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)

{
    //设置主窗口标题
        setWindowTitle(tr("QMainWindow"));
        text = new QTextEdit(this);
        setCentralWidget(text);

        createActions();
        createMenus();
        createToolBars();

}

MainWindow::~MainWindow()
{

}

void MainWindow::createActions()
{
    //通过图片路径来实现添加Qt资源文件目的
    fileOpenAction = new QAction(QIcon("C:/qt/Mwindow/open.png"),tr("Open"),this);
    fileOpenAction->setShortcut(tr("Ctrl+O"));
    fileOpenAction->setStatusTip(tr("Open a file"));
    connect(fileOpenAction,SIGNAL(triggered()),this,SLOT(slotOpenFile()));

    fileNewAction = new QAction(QIcon("C:/qt/Mwindow/new.png"),tr("New"),this);
    fileNewAction->setShortcut(tr("Ctrl+N"));
    fileNewAction->setStatusTip(tr("new file"));
    connect(fileNewAction,SIGNAL(triggered()),this,SLOT(slotNewFile()));

    fileSaveAction = new QAction(QIcon("C:/qt/Mwindow/save.png"),tr("Save"),this);
    fileSaveAction->setShortcut(tr("Ctrl+S"));
    fileNewAction->setStatusTip(tr("save file"));
    connect(fileNewAction,SIGNAL(triggered()),this,SLOT(slotSaveFile()));

    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("C:/qt/Mwindow/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("C:/qt/Mwindow/copy.png"),tr("Copy"),this);
    copyAction->setShortcut(tr("Ctrl+C"));
    copyAction->setStatusTip(tr("copy to clipboard"));
    connect(copyAction,SIGNAL(triggered()),this,SLOT(copy()));

    pasteAction = new QAction(QIcon("C:/qt/Mwindow/paste.png"),tr("paste"),this);
    pasteAction->setShortcut(tr("Ctrl+V"));
    pasteAction->setStatusTip(tr("paste clipboard to selection"));
    connect(pasteAction,SIGNAL(triggered()),this,SLOT(paste()));

    aboutAction = new QAction(tr("About"),this);
    connect(aboutAction,SIGNAL(triggered()),this,SLOT(slotAbout()));

}

void MainWindow::createMenus()
{
    fileMenu = menuBar()->addMenu(tr("File"));
    fileMenu->addAction(fileNewAction);
    fileMenu->addAction(fileOpenAction);
    fileMenu->addAction(fileSaveAction);
    fileMenu->addAction(exitAction);


    editMenu = menuBar()->addMenu(tr("Edit"));
    editMenu->addAction(copyAction);
    editMenu->addAction(cutAction);
    editMenu->addAction(pasteAction);


    aboutMenu = menuBar()->addMenu(tr("Help"));
    aboutMenu->addAction(aboutAction);

}

void MainWindow::createToolBars()
{
    fileTool = addToolBar("File");
    fileTool->addAction(fileNewAction);
    fileTool->addAction(fileOpenAction);
    fileTool->addAction(fileSaveAction);

    editTool = addToolBar("Edit");
    editTool->addAction(copyAction);
    editTool->addAction(cutAction);
    editTool->addAction(pasteAction);
}

void MainWindow::slotNewFile()
{
    MainWindow *newWin = new MainWindow;
    newWin->show();
}

void MainWindow::slotOpenFile()
{
    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::loadFile(QString fileName)
{
    printf("file name:%s
",fileName.data());
    QFile file(fileName);
    if(file.open(QIODevice::ReadOnly|QIODevice::Text))
    {
        QTextStream textStream(&file);
        while(!textStream.atEnd())
        {
            text->append(textStream.readLine());
            printf("read line.
");
        }
        printf("end
");

    }
}
#include <QtGui/QApplication>
#include "mainwindow.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}
原文地址:https://www.cnblogs.com/JeffreyCheung/p/5826664.html