zoukankan      html  css  js  c++  java
  • 30.QT IDE编写

    • mainwindow.h
        1 #ifndef MAINWINDOW_H
        2 #define MAINWINDOW_H
        3 
        4 #include <QMainWindow>
        5 #include <QTextEdit>
        6 #include <QMenu>
        7 #include <QMenuBar>
        8 #include <QAction>
        9 #include <QFileDialog>
       10 #include <QMessageBox>
       11 #include <iostream>
       12 #include <fstream>
       13 #include <cstdlib>
       14 
       15 #include <QImage>
       16 #include <QLabel>
       17 #include <QMenu>
       18 #include <QMenuBar>
       19 #include <QComboBox>
       20 #include <QSpinBox>
       21 #include <QToolBar>
       22 #include <QFontComboBox>
       23 #include <QToolButton>
       24 #include <QTextCharFormat>
       25 using namespace std;
       26 
       27 namespace Ui {
       28 class MainWindow;
       29 }
       30 
       31 class MainWindow : public QMainWindow
       32 {
       33     Q_OBJECT
       34 
       35 public:
       36     explicit MainWindow(QWidget *parent = 0);
       37     ~MainWindow();
       38     void createActions();
       39     void createMenus();
       40     void createToolBars();
       41 
       42 private:
       43     Ui::MainWindow *ui;
       44     QString filename;
       45     //文本编辑
       46     QTextEdit *text;
       47     //菜单
       48     QMenu *file;
       49         //菜单选项
       50         QAction *Afile_open;
       51         QAction *Afile_close;
       52         QAction *Afile_save;
       53         QAction *Afile_exit;
       54 
       55     QMenu *edit;
       56         QAction *Afile_selall;
       57         QAction *Afile_cut;
       58         QAction *Afile_copy;
       59         QAction *Afile_paste;
       60 
       61     QMenu *build;
       62         QAction *Abuild_it;
       63         QAction *Abuild_andrun;
       64 
       65     QMenu *about;
       66         QAction *Aabout_it;
       67 
       68 private:
       69         QMenu *fileMenu;                                   //各项菜单栏
       70             QMenu *zoomMenu;
       71             QMenu *rotateMenu;
       72             QMenu *mirrorMenu;
       73 
       74             QImage img;
       75             QString fileName;
       76             //编辑显示窗口
       77            // ShowWidget *showWidget;
       78 
       79             QAction *openFileAction;                         //文件菜单项
       80             QAction *NewFileAction;
       81             QAction *PrintTextAction;
       82             QAction *PrintImageAction;
       83             QAction *exitAction;
       84 
       85             QAction *copyAction;                              //编辑菜单项
       86             QAction *cutAction;
       87             QAction *pasteAction;
       88             QAction *aboutAction;
       89             QAction *zoomInAction;
       90             QAction *zoomOutAction;
       91 
       92             QAction *rotate90Action;                         //旋转菜单项
       93             QAction *rotate180Action;
       94             QAction *rotate270Action;
       95 
       96             QAction *mirrorVerticalAction;                  //镜像菜单项
       97             QAction *mirrorHorizontalAction;
       98 
       99             QAction *undoAction;
      100             QAction *redoAction;
      101 
      102             QToolBar *fileTool;                              //工具栏
      103             QToolBar *zoomTool;
      104             QToolBar *rotateTool;
      105             QToolBar *mirrorTool;
      106 
      107             QToolBar *doToolBar;
      108 
      109             QLabel *fontLabel1;                             //字体设置项
      110             QFontComboBox *fontComboBox;
      111             QLabel *fontLabel2;
      112             QComboBox *sizeComboBox;
      113             QToolButton *boldBtn;
      114             QToolButton *italicBtn;
      115             QToolButton *underlineBtn;
      116             QToolButton *colorBtn;
      117 
      118             QToolBar *fontToolBar;                          //字体工具栏
      119 
      120             QLabel *listLabel;                              //排序设置项
      121             QComboBox *listComboBox;
      122             QActionGroup *actGrp;
      123             QAction *leftAction;
      124             QAction *rightAction;
      125             QAction *centerAction;
      126             QAction *justifyAction;
      127 
      128             QToolBar *listToolBar;                          //排序工具栏
      129 private slots:
      130     void file_open();
      131     void file_close();
      132     void file_save();
      133     void file_exit();
      134     void file_selall();
      135     void file_cut();
      136     void file_copy();
      137     void file_paste();
      138     void build_it();
      139     void build_andrun();
      140     void about_it();
      141 
      142 };
      143 
      144 #endif // MAINWINDOW_H
    • mainwindow.cpp
        1 #include "mainwindow.h"
        2 #include "ui_mainwindow.h"
        3 
        4 MainWindow::MainWindow(QWidget *parent) :
        5     QMainWindow(parent),
        6     ui(new Ui::MainWindow)
        7 {
        8 
        9     ui->setupUi(this);
       10     //设置文本编辑器
       11     text = new QTextEdit;
       12     QFont font;
       13     font.setPixelSize(30);
       14     text->setFont(font);
       15     QColor qcolor;
       16     qcolor.setRgb(255,255,255);
       17     this->setCentralWidget(text);
       18 
       19     //设置菜单
       20     file = this->menuBar()->addMenu("文件");
       21     edit = this->menuBar()->addMenu("编辑");
       22     build = this->menuBar()->addMenu("构建");
       23     about = this->menuBar()->addMenu("关于");
       24 
       25     //about菜单
       26     {
       27         Aabout_it = new QAction("关于",this);
       28         about->addAction(Aabout_it);
       29         connect(Aabout_it,SIGNAL(triggered(bool)),this,SLOT(about_it()));
       30     }
       31 
       32     //open菜单
       33     {
       34         Afile_open = new QAction("打开文件",this);
       35         file->addAction(Afile_open);
       36         connect(Afile_open,SIGNAL(triggered(bool)),this,SLOT(file_open()));
       37 
       38         Afile_close = new QAction("关闭文件",this);
       39         file->addAction(Afile_close);
       40         connect(Afile_close,SIGNAL(triggered(bool)),this,SLOT(file_close()));
       41 
       42         Afile_save = new QAction("保存文件",this);
       43         file->addAction(Afile_save);
       44         connect( Afile_save,SIGNAL(triggered(bool)),this,SLOT(file_save()));
       45 
       46         Afile_exit = new QAction("退出",this);
       47         file->addAction(Afile_exit);
       48         connect(Afile_exit,SIGNAL(triggered(bool)),this,SLOT(file_exit()));
       49     }
       50 
       51     //编辑菜单
       52     {
       53         Afile_selall = new QAction("全选",this);
       54         edit->addAction(Afile_selall);
       55         connect(Afile_selall,SIGNAL(triggered(bool)),this,SLOT(file_selall()));
       56 
       57         Afile_cut = new QAction("剪切",this);
       58         edit->addAction(Afile_cut);
       59         connect(Afile_cut,SIGNAL(triggered(bool)),this,SLOT(file_cut()));
       60 
       61         Afile_copy = new QAction("复制",this);
       62         edit->addAction(Afile_copy);
       63         connect(Afile_copy,SIGNAL(triggered(bool)),this,SLOT(file_copy()));
       64 
       65         Afile_paste = new QAction("粘贴",this);
       66         edit->addAction(Afile_paste);
       67         connect(Afile_paste,SIGNAL(triggered(bool)),this,SLOT(file_paste()));
       68     }
       69 
       70     {
       71         Abuild_it = new QAction("编译",this);
       72         build->addAction(Abuild_it);
       73         connect(Abuild_it,SIGNAL(triggered(bool)),this,SLOT(build_it()));
       74 
       75         Abuild_andrun = new QAction("编译执行",this);
       76         build->addAction(Abuild_andrun);
       77         connect(Abuild_andrun,SIGNAL(triggered(bool)),this,SLOT(build_andrun()));
       78     }
       79 
       80     this->setWindowTitle("简易编译器");
       81 
       82     //showWidget =new ShowWidget(this);
       83      //   setCentralWidget(showWidget);
       84         //在工具栏上嵌入控件
       85         //设置字体
       86         fontLabel1 =new QLabel(tr("字体:"));
       87         fontComboBox =new QFontComboBox;
       88         fontComboBox->setFontFilters(QFontComboBox::ScalableFonts);
       89 
       90         fontLabel2 =new QLabel(tr("字号:"));
       91         sizeComboBox =new QComboBox;
       92         QFontDatabase db;
       93         foreach(int size,db.standardSizes())
       94             sizeComboBox->addItem(QString::number(size));
       95 
       96         boldBtn =new QToolButton;
       97         boldBtn->setIcon(QIcon("bold.png"));
       98         boldBtn->setCheckable(true);
       99         italicBtn =new QToolButton;
      100         italicBtn->setIcon(QIcon("italic.png"));
      101         italicBtn->setCheckable(true);
      102 
      103         underlineBtn =new QToolButton;
      104         underlineBtn->setIcon(QIcon("underline.png"));
      105         underlineBtn->setCheckable(true);
      106 
      107         colorBtn =new QToolButton;
      108         colorBtn->setIcon(QIcon("color.png"));
      109         colorBtn->setCheckable(true);
      110 
      111         //排序
      112         listLabel =new QLabel(tr("排序"));
      113         listComboBox =new QComboBox;
      114         listComboBox->addItem("Standard");
      115         listComboBox->addItem("QTextListFormat::ListDisc");
      116         listComboBox->addItem("QTextListFormat::ListCircle");
      117         listComboBox->addItem("QTextListFormat::ListSquare");
      118         listComboBox->addItem("QTextListFormat::ListDecimal");
      119         listComboBox->addItem("QTextListFormat::ListLowerAlpha");
      120         listComboBox->addItem("QTextListFormat::ListUpperAlpha");
      121         listComboBox->addItem("QTextListFormat::ListLowerRoman");
      122         listComboBox->addItem("QTextListFormat::ListUpperRoman");
      123 
      124         createActions();
      125         createMenus();
      126         createToolBars();
      127 
      128         if(img.load("image.png"))
      129         {
      130             //showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
      131         }
      132 
      133 }
      134 
      135 MainWindow::~MainWindow()
      136 {
      137     delete ui;
      138 }
      139 
      140 void MainWindow::file_open()
      141 {
      142     filename =QFileDialog::getOpenFileName(this,"hello","*.*");
      143     if(filename.isEmpty())
      144     {
      145         QMessageBox::information(this,"提示","注意选择一个文件");
      146         return;
      147     }
      148     fstream fin(filename.toStdString().c_str());
      149     if(!fin)
      150     {
      151         QMessageBox::information(this,"提示","打开文件失败");
      152         return;
      153     }
      154 
      155     while(!fin.eof())
      156     {
      157         char buf[2014]={0};
      158         fin.getline(buf,2014);
      159         text->append(buf);
      160     }
      161     fin.close();
      162 }
      163 
      164 void MainWindow::file_close()
      165 {
      166     text->setText("");
      167     filename ="";
      168 }
      169 
      170 void MainWindow::file_save()
      171 {
      172     filename = QFileDialog::getSaveFileName();
      173     if(filename.isEmpty())
      174     {
      175         QMessageBox::information(this,"提示","打开文件失败");
      176         return;
      177     }
      178 
      179     QString info =text->toPlainText().toStdString().c_str();
      180     //写入
      181     ofstream fout(filename.toStdString().c_str());
      182     if(!fout)
      183     {
      184         QMessageBox::information(this,"提示","打开文件失败");
      185         return;
      186     }
      187     fout.write(info.toStdString().c_str(),strlen(info.toStdString().c_str()));
      188     fout.close();
      189 }
      190 
      191 void MainWindow::file_exit()
      192 {
      193     exit(0);
      194 }
      195 
      196 void MainWindow::file_selall()
      197 {
      198     text->selectAll();
      199 }
      200 
      201 void MainWindow::file_cut()
      202 {
      203     text->cut();
      204 }
      205 
      206 void MainWindow::file_copy()
      207 {
      208     text->copy();
      209 }
      210 
      211 void MainWindow::file_paste()
      212 {
      213     text->paste();
      214 }
      215 
      216 void MainWindow::build_it()
      217 {
      218     QString destexename = filename;
      219     bool iscpp = destexename.contains(".cpp");
      220     QString cmd;
      221     if(iscpp)
      222     {
      223         destexename.replace(".cpp",".exe");
      224         cmd = "g++ -o " + destexename+" " +filename;
      225     }
      226     else
      227     {
      228         destexename.replace(".c",".exe");
      229         cmd = "gcc -o "+destexename+" "+filename;
      230     }
      231     system(cmd.toStdString().c_str());
      232 }
      233 
      234 void MainWindow::build_andrun()
      235 {
      236     QString destexename = filename;
      237     bool iscpp = destexename.contains(".cpp");
      238     QString cmd;
      239     if(iscpp)
      240     {
      241         destexename.replace(".cpp",".exe");
      242         cmd = "g++ -o "+filename+" "+destexename;
      243     }
      244     else
      245     {
      246         destexename.replace(".c",".exe");
      247         cmd = "gcc -o "+filename+" "+destexename;
      248     }
      249     system(cmd.toStdString().c_str());
      250 
      251     system(destexename.toStdString().c_str());
      252 }
      253 
      254 void MainWindow::about_it()
      255 {
      256     QMessageBox::information(this,"hello","版权所有,盗版不究");
      257 }
      258 
      259 void MainWindow::createActions()
      260 {
      261     //"打开"动作
      262     openFileAction =new QAction(QIcon("open.png"),tr("打开"),this);
      263     openFileAction->setShortcut(tr("Ctrl+O"));
      264     openFileAction->setStatusTip(tr("打开一个文件"));
      265    // connect(openFileAction,SIGNAL(triggered()),this,SLOT(ShowOpenFile()));
      266 
      267     //"新建"动作
      268     NewFileAction =new QAction(QIcon("new.png"),tr("新建"),this);
      269     NewFileAction->setShortcut(tr("Ctrl+N"));
      270     NewFileAction->setStatusTip(tr("新建一个文件"));
      271     //connect(NewFileAction,SIGNAL(triggered()),this,SLOT(ShowNewFile()));
      272 
      273     //"退出"动作
      274     exitAction =new QAction(tr("退出"),this);
      275     exitAction->setShortcut(tr("Ctrl+Q"));
      276     exitAction->setStatusTip(tr("退出程序"));
      277     //connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));
      278 
      279     //"复制"动作
      280     copyAction =new QAction(QIcon("copy.png"),tr("复制"),this);
      281     copyAction->setShortcut(tr("Ctrl+C"));
      282     copyAction->setStatusTip(tr("复制文件"));
      283    // connect(copyAction,SIGNAL(triggered()),showWidget->text,SLOT(copy()));
      284 
      285     //"剪切"动作
      286     cutAction =new QAction(QIcon("cut.png"),tr("剪切"),this);
      287     cutAction->setShortcut(tr("Ctrl+X"));
      288     cutAction->setStatusTip(tr("剪切文件"));
      289     //connect(cutAction,SIGNAL(triggered()),showWidget->text,SLOT(cut()));
      290 
      291     //"粘贴"动作
      292     pasteAction =new QAction(QIcon("paste.png"),tr("粘贴"),this);
      293     pasteAction->setShortcut(tr("Ctrl+V"));
      294     pasteAction->setStatusTip(tr("粘贴文件"));
      295   //  connect(pasteAction,SIGNAL(triggered()),showWidget->text,SLOT(paste()));
      296 
      297     //"关于"动作
      298     aboutAction =new QAction(tr("关于"),this);
      299    // connect(aboutAction,SIGNAL(triggered()),this,SLOT(QApplication::aboutQt()));
      300 
      301     //"打印文本"动作
      302     PrintTextAction =new QAction(QIcon("printText.png"),tr("打印文本"), this);
      303     PrintTextAction->setStatusTip(tr("打印一个文本"));
      304    // connect(PrintTextAction,SIGNAL(triggered()),this,SLOT(ShowPrintText()));
      305 
      306     //"打印图像"动作
      307     PrintImageAction =new QAction(QIcon("printImage.png"),tr("打印图像"), this);
      308     PrintImageAction->setStatusTip(tr("打印一幅图像"));
      309   //  connect(PrintImageAction,SIGNAL(triggered()),this,SLOT(ShowPrintImage()));
      310 
      311     //"放大"动作
      312     zoomInAction =new QAction(QIcon("zoomin.png"),tr("放大"),this);
      313     zoomInAction->setStatusTip(tr("放大一张图片"));
      314    // connect(zoomInAction,SIGNAL(triggered()),this,SLOT(ShowZoomIn()));
      315 
      316     //"缩小"动作
      317     zoomOutAction =new QAction(QIcon("zoomout.png"),tr("缩小"),this);
      318     zoomOutAction->setStatusTip(tr("缩小一张图片"));
      319    // connect(zoomOutAction,SIGNAL(triggered()),this,SLOT(ShowZoomOut()));
      320 
      321     //实现图像旋转的动作(Action)
      322     //旋转90°
      323     rotate90Action =new QAction(QIcon("rotate90.png"),tr("旋转90°"),this);
      324     rotate90Action->setStatusTip(tr("将一幅图旋转90°"));
      325    // connect(rotate90Action,SIGNAL(triggered()),this,SLOT(ShowRotate90()));
      326 
      327     //旋转180°
      328     rotate180Action =new QAction(QIcon("rotate180.png"),tr("旋转180°"), this);
      329     rotate180Action->setStatusTip(tr("将一幅图旋转180°"));
      330     connect(rotate180Action,SIGNAL(triggered()),this,SLOT(ShowRotate180()));
      331 
      332     //旋转270°
      333     rotate270Action =new QAction(QIcon("rotate270.png"),tr("旋转270°"), this);
      334     rotate270Action->setStatusTip(tr("将一幅图旋转270°"));
      335    // connect(rotate270Action,SIGNAL(triggered()),this,SLOT(ShowRotate270()));
      336 
      337     //实现图像镜像的动作(Action)
      338     //纵向镜像
      339     mirrorVerticalAction =new QAction(tr ("纵向镜像"),this);
      340     mirrorVerticalAction->setStatusTip(tr("对一张图作纵向镜像"));
      341    // connect(mirrorVerticalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorVertical()));
      342 
      343     //横向镜像
      344     mirrorHorizontalAction =new QAction(tr("横向镜像"),this);
      345     mirrorHorizontalAction->setStatusTip(tr("对一张图作横向镜像"));
      346     //connect(mirrorHorizontalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorHorizontal()));
      347 
      348     //排序:左对齐、右对齐、居中和两端对齐
      349     actGrp =new QActionGroup(this);
      350 
      351     leftAction =new QAction(QIcon("left.png"),"左对齐",actGrp);
      352     leftAction->setCheckable(true);
      353 
      354     rightAction =new QAction(QIcon("right.png"),"右对齐",actGrp);
      355     rightAction->setCheckable(true);
      356 
      357     centerAction =new QAction(QIcon("center.png"),"居中",actGrp);
      358     centerAction->setCheckable(true);
      359 
      360     justifyAction =new QAction(QIcon("justify.png"),"两端对齐",actGrp);
      361     justifyAction->setCheckable(true);
      362 
      363    // connect(actGrp,SIGNAL(triggered(QAction*)),this,SLOT(ShowAlignment(QAction*)));
      364 
      365     //实现撤销和重做的动作(Action)
      366     //撤销和重做
      367     undoAction =new QAction(QIcon("undo.png"),"撤销",this);
      368    // connect(undoAction,SIGNAL(triggered()),showWidget->text,SLOT(undo()));
      369     redoAction =new QAction(QIcon("redo.png"),"重做",this);
      370     //connect(redoAction,SIGNAL(triggered()),showWidget->text,SLOT(redo()));
      371 }
      372 
      373 void MainWindow::createMenus()
      374 {
      375     //文件菜单
      376     fileMenu =menuBar()->addMenu(tr("文件"));
      377     fileMenu->addAction(openFileAction);
      378     fileMenu->addAction(NewFileAction);
      379     fileMenu->addAction(PrintTextAction);
      380     fileMenu->addAction(PrintImageAction);
      381     fileMenu->addSeparator();
      382     fileMenu->addAction(exitAction);
      383 
      384     //缩放菜单
      385     zoomMenu =menuBar()->addMenu(tr("编辑"));
      386     zoomMenu->addAction(copyAction);
      387     zoomMenu->addAction(cutAction);
      388     zoomMenu->addAction(pasteAction);
      389     zoomMenu->addAction(aboutAction);
      390     zoomMenu->addSeparator();
      391     zoomMenu->addAction(zoomInAction);
      392     zoomMenu->addAction(zoomOutAction);
      393 
      394     //旋转菜单
      395     rotateMenu =menuBar()->addMenu(tr("旋转"));
      396     rotateMenu->addAction(rotate90Action);
      397     rotateMenu->addAction(rotate180Action);
      398     rotateMenu->addAction(rotate270Action);
      399 
      400     //镜像菜单
      401     mirrorMenu =menuBar()->addMenu(tr("镜像"));
      402     mirrorMenu->addAction(mirrorVerticalAction);
      403     mirrorMenu->addAction(mirrorHorizontalAction);
      404 }
      405 
      406 void MainWindow::createToolBars()
      407 {
      408     //文件工具条
      409     fileTool =addToolBar("File");
      410     fileTool->addAction(openFileAction);
      411     fileTool->addAction(NewFileAction);
      412     fileTool->addAction(PrintTextAction);
      413     fileTool->addAction(PrintImageAction);
      414 
      415     //编辑工具条
      416     zoomTool =addToolBar("Edit");
      417     zoomTool->addAction(copyAction);
      418     zoomTool->addAction(cutAction);
      419     zoomTool->addAction(pasteAction);
      420     zoomTool->addSeparator();
      421     zoomTool->addAction(zoomInAction);
      422     zoomTool->addAction(zoomOutAction);
      423 
      424     //旋转工具条
      425     rotateTool =addToolBar("rotate");
      426     rotateTool->addAction(rotate90Action);
      427     rotateTool->addAction(rotate180Action);
      428     rotateTool->addAction(rotate270Action);
      429 
      430     //撤销和重做工具条
      431     doToolBar =addToolBar("doEdit");
      432     doToolBar->addAction(undoAction);
      433     doToolBar->addAction(redoAction);
      434 
      435     //字体工具条
      436     fontToolBar =addToolBar("Font");
      437     fontToolBar->addWidget(fontLabel1);
      438     fontToolBar->addWidget(fontComboBox);
      439     fontToolBar->addWidget(fontLabel2);
      440     fontToolBar->addWidget(sizeComboBox);
      441     fontToolBar->addSeparator();
      442     fontToolBar->addWidget(boldBtn);
      443     fontToolBar->addWidget(italicBtn);
      444     fontToolBar->addWidget(underlineBtn);
      445     fontToolBar->addSeparator();
      446     fontToolBar->addWidget(colorBtn);
      447 
      448     //排序工具条
      449     listToolBar =addToolBar("list");
      450     listToolBar->addWidget(listLabel);
      451     listToolBar->addWidget(listComboBox);
      452     listToolBar->addSeparator();
      453     listToolBar->addActions(actGrp->actions());
      454 }
    • main.cpp
       1 #include "mainwindow.h"
       2 #include <QApplication>
       3 
       4 
       5 int main(int argc, char *argv[])
       6 {
       7     QApplication a(argc, argv);
       8     MainWindow w;
       9     w.show();
      10     w.resize(1024,768);
      11     return a.exec();
      12 }
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8784614.html
Copyright © 2011-2022 走看看