QT 自己制作IDE工具
项目创建
基类选择
项目文件
编译运行
项目文件1mainwindow.h
#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QTextEdit>//文本#include<QMenu>//加入菜单#include<QMenuBar>//加入菜单栏#include<QAction>//加入菜单栏#include<QFileDialog>classMainWindow:publicQMainWindow{Q_OBJECTpublic:MainWindow(QWidget*parent=0);~MainWindow();private:boolis_changed;QStringfilename;//当前文件的名字QTextEdit*text1;//中央的TextEdit控件//文件菜单QMenu*file_menu;//文件菜单QAction*new_file;//新建文件菜单项QAction*open_file;//打开文件菜单项QAction*save_file;//保存文件菜单项QAction*exit_file;//退出文件菜单项//编辑菜单QMenu*edit_menu;//编辑菜单QAction*copy_edit;//编辑菜单的复制按钮QAction*paste_edit;QAction*cut_edit;QAction*allselect_edit;QMenu*help_menu;//帮助菜单//编译菜单QMenu*comp_menu;//编译菜单QAction*comp_comp;//编译按钮QAction*run_comp;//运行按钮voidprecomp();privateslots:voidon_exit();//在QT编辑环境,安装ALT+ENTER,出现提示再按一次回车voidon_open();voidon_save();voidon_new();voidon_copy();voidon_paste();voidon_cut();voidon_allselect();voidon_changed();voidon_comp();voidon_run();};#endif//MAINWINDOW_H
项目文件2 main.cpp
#include"mainwindow.h"#include<QApplication>intmain(intargc,char*argv[]){QApplicationa(argc,argv);MainWindoww;w.resize(800,600);//设置主窗口的长宽w.show();returna.exec();}
项目文件3mainwindow.cpp
#include"mainwindow.h"MainWindow::MainWindow(QWidget*parent)//构造函数:QMainWindow(parent){text1=newQTextEdit;//在堆中创建一个QTextEdit实例text1->setFontPointSize(14);//设置窗体的字体大小this->setCentralWidget(text1);//将TextEdit控件加入到主窗口的工作区//文本内容在保存前是否发生变动is_changed=false;//添加菜单项,并为其设定快捷键//【文件菜单栏】file_menu=this->menuBar()->addMenu("文件");new_file=newQAction("新建文件",this);//第一个参数是菜单项的文字,第二个参数是指向主体的指针new_file->setShortcut(tr("ctrl+n"));//设定快捷键file_menu->addAction(new_file);//关联菜单栏与菜单项file_menu->addSeparator();//在文件下拉菜单上面显示一个分隔符open_file=newQAction("打开文件",this);file_menu->addAction(open_file);open_file->setShortcut(tr("ctrl+o"));save_file=newQAction("保存文件",this);file_menu->addAction(save_file);save_file->setShortcut(tr("ctrl+s"));exit_file=newQAction("退出",this);file_menu->addAction(exit_file);//【编辑菜单栏】edit_menu=this->menuBar()->addMenu("编辑");copy_edit=newQAction("复制",this);copy_edit->setShortcut(tr("ctrl+c"));edit_menu->addAction(copy_edit);paste_edit=newQAction("粘贴",this);paste_edit->setShortcut(tr("ctrl+v"));edit_menu->addAction(paste_edit);cut_edit=newQAction("剪切",this);cut_edit->setShortcut(tr("ctrl+x"));edit_menu->addAction(cut_edit);allselect_edit=newQAction("全选",this);allselect_edit->setShortcut(tr("ctrl+a"));edit_menu->addAction(allselect_edit);//【编译菜单栏】comp_menu=this->menuBar()->addMenu("编译");comp_comp=newQAction("编译",this);comp_menu->addAction(comp_comp);run_comp=newQAction("运行",this);comp_menu->addAction(run_comp);//【帮助菜单栏】help_menu=this->menuBar()->addMenu("帮助");//【鼠标事件与函数关联】当鼠标点击exit_file菜单的时候,执行on_exit()函数connect(exit_file,SIGNAL(triggered()),this,SLOT(on_exit()));connect(open_file,SIGNAL(triggered()),this,SLOT(on_open()));connect(save_file,SIGNAL(triggered()),this,SLOT(on_save()));connect(new_file,SIGNAL(triggered()),this,SLOT(on_new()));connect(copy_edit,SIGNAL(triggered()),this,SLOT(on_copy()));connect(paste_edit,SIGNAL(triggered()),this,SLOT(on_paste()));connect(cut_edit,SIGNAL(triggered()),this,SLOT(on_cut()));connect(allselect_edit,SIGNAL(triggered()),this,SLOT(on_allselect()));connect(text1,SIGNAL(textChanged()),this,SLOT(on_changed()));//当文本内容发生变化时,触发on_changed函数connect(comp_comp,SIGNAL(triggered()),this,SLOT(on_comp()));//当文本内容发生变化时,触发on_changed函数connect(run_comp,SIGNAL(triggered()),this,SLOT(on_run()));//当文本内容发生变化时,触发on_changed函数}MainWindow::~MainWindow()//析构函数{deletetext1;text1=NULL;}voidMainWindow::precomp()//预编译{FILE*p=fopen(filename.toStdString().data(),"r");if(p==NULL)return;QStringcmd=filename+".c";FILE*p1=fopen(cmd.toStdString().data(),"w");if(p1==NULL)return;QStringstr;while(!feof(p)){charbuf[1024]={0};fgets(buf,sizeof(buf),p);str+=buf;}str.replace("包含","#include");str.replace("主函数","main");str.replace("整数","int");str.replace("开始","{");str.replace("收工","}");str.replace("。",";");str.replace("返回","return");str.replace("打印","printf");str.replace("输入输出","<stdio.h>");str.replace("无声的等待...","getchar()");fputs(str.toStdString().data(),p1);fclose(p);fclose(p1);}//程序退出voidMainWindow::on_exit(){this->close();}//打开文件voidMainWindow::on_open(){filename=QFileDialog::getOpenFileName(this,"打开");if(filename.isEmpty())return;//考虑用户选择取消的情景FILE*p=fopen(filename.toStdString().data(),"r");if(p==NULL)return;QStringstr;while(!feof(p)){charbuf[1024]={0};fgets(buf,sizeof(buf),p);str+=buf;}fclose(p);text1->setText(str);is_changed=false;}//保存文件voidMainWindow::on_save(){if(filename.isEmpty()){filename=QFileDialog::getSaveFileName(this,"保存文件");}if(!filename.isEmpty()){FILE*p=fopen(filename.toStdString().data(),"w");if(p==NULL)return;QStringstr=text1->toPlainText();fputs(str.toStdString().data(),p);fclose(p);}}//新建文件voidMainWindow::on_new(){if(is_changed==true){on_save();is_changed=false;}filename="";text1->setText("");}//IDE的复制功能voidMainWindow::on_copy(){text1->copy();}voidMainWindow::on_paste(){text1->paste();}voidMainWindow::on_cut(){text1->cut();}voidMainWindow::on_allselect(){text1->selectAll();}voidMainWindow::on_changed(){is_changed=true;}//编译并运行按钮voidMainWindow::on_comp(){if(is_changed==true)//在点击编译按钮,如果文本内容发生变化,就自动保存{on_save();}precomp();//自动以预编译QStringcmd;constchar*s=filename.toStdString().data();cmd.sprintf("gcc-o%s.exe%s.c",s,s);system(cmd.toStdString().data());//先编译//如何删除那个临时文件呢cmd=filename.replace("/","\\")+".c";remove(cmd.toStdString().data());cmd=filename+".exe";system(cmd.toStdString().data());//再运行}voidMainWindow::on_run(){QStringcmd;cmd=filename+".exe";system(cmd.toStdString().data());}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。