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()
{
}

QT 创建主窗口 MainWindow 实例的更多相关文章

  1. Qt实现应用程序单实例运行--LocalServer方式

    使Qt应用程序能够单实例运行的典型实现方法是使用共享内存实现.该方法实现简单,代码简洁. 但有一个致命缺陷:共享内存(QSharedMemory)实现的单程序运行,当运行环境是UNIX时,并且程序不幸 ...

  2. Qt创建堆叠窗口

    1.QT创建堆叠窗口使用类,但是使用它时主窗口不能是MainWindow,否则会出现布局错误,本例中使用基类为QDialog QStackedWidget 2.可以配合列表框QListWidget和Q ...

  3. SQLServer之创建主XML索引

    创建主XML索引注意事项 若要创建主 XML 索引,请使用 CREATE INDEX (Transact-SQL) Transact-SQL DDL 语句. XML 索引不完全支持可用于非 XML 索 ...

  4. Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)

    Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述用这两种方式来实现窗口边框圆角的效果. 一.使用setStyleSheet方法 this- ...

  5. sql语句创建主键、外键、索引、绑定默认值

    use Mengyou88_Wuliu --创建公司表 create table dbo.Company2 ( CompanyID ,) not null, CompanyName ) null, A ...

  6. oracle创建主键序列和在ibatis中应用

    oracle创建主键序列 oracle主键序列的查询和ibitas中应用

  7. QT中关于窗口全屏显示与退出全屏的实现

    近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...

  8. Oracle创建主键自增表

    Oracle创建主键自增表   1.创建表    create table Test_Increase(            userid number(10) NOT NULL primary k ...

  9. oracle建表的时候同时创建主键,外键,注释,约束,索引

    --主键create table emp (id number constraint id_pr primary key ,name1 varchar(8));create table emp9 (i ...

随机推荐

  1. tomcat ; nginx ;mysql

    [说明]上午在服务器上部署了自己的web目录(tomcat虚拟目录),下午安装并了解了nginx(出了点问题,后来解决了),晚上尝试nginx和tomcat配置(一头雾水) 一:今日完成 1)配置to ...

  2. Centos7配置外部网络访问

    Centos7配置外部网络访问 一.安装步骤中的重要配置: 默认是动态ip配置,有需要可以改成静配置 BOOTPROTO="static" 二.如果不能联网,按照如下步骤设置网络: ...

  3. 转载:HTML/CSS 速写神器:Emmet

    转载在http://bubkoo.com/2014/01/04/emmet-a-toolkit-for-improving-html-css-workflow/ 在前端开发的过程中,一个最繁琐的工作就 ...

  4. golang 面向对象

    深入理解GO语言的面向对象_Golang_脚本之家 https://www.jb51.net/article/94030.htm 深入理解GO语言的面向对象 更新时间:2016年10月04日 10:4 ...

  5. 密码硬编码(Password Management: Hardcoded Password)

    在对项目进行安全扫描时,发现一些密码硬编码问题,本文主要三个方面:1)什么是密码硬编码:2)密码硬编码的危害:3)密码硬编码的解决方案. 一 什么是密码硬编码 将密码以明文的形式直接写到代码中,就是密 ...

  6. Docker + ElasticSearch + Node.js

    最近有空就想研究下ElasticSearch. 此篇文章用来记录研究过程.备注:需要有一定的docker基础,ElasticSearch的基本概念 Docker安装ElasticSearch 首先,就 ...

  7. WCF 远程服务器返回了意外响应: (400) Bad Request。

    WCF 端  <system.web> <httpRuntime maxRequestLength="2147483647" /> </system. ...

  8. openstack ocata版(脚本)控制节点安装

    一.初始化环境: 1.更换yum源: yum install -y wget mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS- ...

  9. api响应类

    接口开发响应类封装 class response{ /* * 封通信接口数据 * @param integer $code 状态码 * @param string $message 状态信息 * @p ...

  10. json教程系列(2)-生成JSONObject的方法

    生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 ...