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\n",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.\n");
}
printf("end\n"); }
}
#include <QtGui/QApplication>
#include "mainwindow.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show(); return a.exec();
}
Qt实现基本QMainWindow主窗口程序的更多相关文章
- [Qt5] 使用Qt设计器绘制主窗口
实践代码: git clone https://github.com/dilexliu/learn_qt5.git Step1: Qt设计器绘制窗口 保存会得到一个文件: mainwindow.ui ...
- Qt笔记——2.编写多窗口程序
所学教程网址:http://www.qter.org/portal.php?mod=view&aid=27&page=2 设置按钮文字 MainWindow::MainWindow(Q ...
- Qt Widgets——主窗口及其主要组成部分
Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...
- [Qt Creator 快速入门] 第5章 应用程序主窗口
对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...
- Qt应用程序主窗口之二:拖放操作与打印文档
一.拖放操作 对于一个实用的应用程序,不仅希望能从文件菜单中打开一个文件,更希望可以通过拖动直接将桌面上的文件拖入程序界面上来打开,就像可以将.pro文件拖入Creator中来打开整个项目一样.Qt中 ...
- PyQt(Python+Qt)学习随笔:QMainWindow的addDockWidget方法增加QDockWidget停靠窗到主窗口
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 DockWidget除了放在QMainWindow窗口内外,也可以放在 ...
- 第15.11节 PyQt(Python+Qt)入门学习:Qt Designer(设计师)组件Property Editor(属性编辑)界面中主窗口QMainWindow类相关属性详解
概述 主窗口对象是在新建窗口对象时,选择main window类型的模板时创建的窗口对象,如图: 在属性编辑界面中,主窗口对象与QMainWindow相关的属性包括:iconSize.toolButt ...
- Qt__主窗口、菜单和工具条(QMainWindow,QMenu,QToolBar)
转自豆子空间 主窗口 Qt的GUI程序有一个常用的顶层窗口,叫做MainWindow.MainWindow继承自QMainWindow.QMainWindow窗口分成几个主要的区域: 最上面是Wind ...
- 主窗口QMainWindow和启动画面
在较为大型复杂,功能较多的应用程序中,我们通常继承QMainWindow类来进行开发.该主窗口为搭建应用用户界面提供了非常好的框架,请看下图: 可以看出该主窗口类为我们提供了菜单栏(Menu Bar) ...
随机推荐
- angular验证表单
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>a ...
- [js高手之路]设计模式系列课程-设计一个模块化扩展功能(define)和使用(use)库
模块化的诞生标志着javascript开发进入工业时代,近几年随着es6, require js( sea js ), node js崛起,特别是es6和node js自带模块加载功能,给大型程序开发 ...
- echarts堆叠图展示,根据数据维度的粒度判断是否展示数据
1.定义一个参数,返回根据判断什么条件是否显示值; 2.var a = '<%=(String)request.getAttribute("type")%&>' ...
- eclipse如何把多个项目用不同的文件夹分隔开
我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- 多线程编程学习四(Lock 的使用).
一.前言 本文要介绍使用Java5中 Lock 对象,同样也能实现同步的效果,而且在使用上更加方便.灵活,主要包括 ReentrantLock 类的使用和ReentrantReadWriteLock ...
- HDU 6200 2017沈阳网络赛 树上区间更新,求和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6200 题意:给个图,有2种操作,一种是加一条无向边,二是查询u,v之间必须有的边的条数,所谓必须有的边 ...
- Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...
- Python虚拟环境virtualenv
用意 virtualenv可以搭建虚拟且独立的python运行环境, 使得单个项目的运行环境与其它项目独立起来. 安装 virtualenv本质上是个python包, 使用pip安装 pip inst ...
- 【集美大学1411_助教博客】团队作业5——测试与发布(Alpha版本)
同学们好像都进入了状态,任务都完成的不错,测试与发布是一个软件的非常重要的环节,每年双11前夕是阿里巴巴加班最严重的时期,这是因为他们在不断的测试,因为他们不想在双11到来之时有任何差池.所以无论你的 ...