Qt实现自己的IDE
来源:互联网 发布:unity3d fbx没贴图 编辑:程序博客网 时间:2024/05/11 04:03
简易实现了文件操作,编译和运行等功能:
mainwindow.h文件代码:
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>//add控件#include<QTextEdit>//Qt自带的控件#include<QMenu>#include<QMenuBar>#include<QAction>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = 0); ~MainWindow();private: QString filename; QString savefilename;private : QTextEdit *text1; QMenu *file; QMenu *edit; QMenu *build; QMenu *help; QAction *file_open; QAction *file_exit; QAction *help_about; QAction *edit_copy; QAction *edit_cut; QAction *edit_paste; QAction *select_all; QAction *file_save; QAction *build_compile; QAction *build_run;private slots: void on_open(); void on_about(); void on_exit(); void on_copy(); void on_cut(); void on_paste(); void on_selectall(); void on_save(); void on_compile(); void on_run();};#endif // MAINWINDOW_H
main.cpp文件代码:
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.resize(800,600);//设置对话框的宽和高 w.show(); return a.exec();}
mainwindow.cpp文件代码:
#include "mainwindow.h"#include "QMessageBox"#include "QFileDialog"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ text1=new QTextEdit; QFont f; f.setPixelSize(24); text1->setFont(f);//设置字体的大小 QColor c; c.setRgb(160,40,120); text1->setTextColor(c);//设置字体的颜色 this->setCentralWidget(text1);//将这个控件放到对话框的中间 file=this->menuBar()->addMenu("文件");//在菜单栏中添加菜单项 edit=this->menuBar()->addMenu("编辑"); build=this->menuBar()->addMenu("构建"); help=this->menuBar()->addMenu("帮助"); file_open=new QAction("打开",this);//建立一个action file_open->setShortcut(tr("Ctrl+O"));//添加 快捷键 file->addAction(file_open);//将file_open这个action加入到file菜单中 file_save=new QAction("保存",this); file_save->setShortcut(tr("Ctrl+S")); file->addAction(file_save); file_exit=new QAction("tuichu",this); file->addSeparator();//添加分隔符 file->addAction(file_exit); help_about=new QAction("关于",this); help_about->setShortcut(tr("Ctrl+H")); help->addAction(help_about); edit_copy=new QAction("拷贝",this); edit->addAction(edit_copy); edit_cut=new QAction("剪切",this); edit->addAction(edit_cut); edit_paste=new QAction("粘贴",this); edit->addAction(edit_paste); select_all=new QAction("select all",this); edit->addAction(select_all); build_compile=new QAction("编译",this); build->addAction(build_compile); build_run=new QAction("运行",this); build->addAction(build_run); //Qt的消息槽机制 connect(file_open,SIGNAL(triggered()),this,SLOT(on_open())); //第一个参数是触发事件的控件,第二个参数是对于Action来说的固定写法 //第三个参数固定写this,第四个参数指定点击Action后执行那个函数 connect(help_about,SIGNAL(triggered()),this,SLOT(on_about())); connect(file_exit,SIGNAL(triggered()),this,SLOT(on_exit())); connect(edit_copy,SIGNAL(triggered()),this,SLOT(on_copy())); connect(edit_cut,SIGNAL(triggered()),this,SLOT(on_cut())); connect(edit_paste,SIGNAL(triggered()),this,SLOT(on_paste())); connect(select_all,SIGNAL(triggered()),this,SLOT(on_selectall())); connect(file_save,SIGNAL(triggered()),this,SLOT(on_save())); connect(build_compile,SIGNAL(triggered()),this,SLOT(on_compile())); connect(build_run,SIGNAL(triggered()),this,SLOT(on_run()));}MainWindow::~MainWindow(){ delete text1;}void MainWindow::on_open(){ filename=QFileDialog::getOpenFileName(); //函数返回路径+文件名 if(filename.isEmpty()) { return; } QString content;//QString 是Qt封装的一个字符串类 //QMessageBox::information(this,"提示","test"); //filename.toStdString().data();//这个语句即可将QString类型转化为const char *类型 FILE *p=fopen(filename.toStdString().data(),"r");//需要将QString转换为const char * if(p==NULL) { QMessageBox::information(this,"错误","打开文件失败"); } else { while(!feof(p)) { char buf[1024]={0}; fgets(buf,sizeof(buf),p); content+=buf;//将读取到的内容追加到content后面 } fclose(p); text1->setText(content);//将字符串的值放到text里面 }}void MainWindow::on_about(){ QMessageBox::information(this,"帮助","Jumfens\n2010-2016");}void MainWindow::on_exit(){ exit(0);}void MainWindow::on_copy(){ text1->copy();}void MainWindow::on_cut(){ text1->cut();}void MainWindow::on_paste(){ text1->paste();}void MainWindow::on_selectall(){ text1->selectAll();}void MainWindow::on_save(){ savefilename=QFileDialog::getSaveFileName(); if(savefilename==NULL) { return; } FILE *p=fopen(savefilename.toStdString().data(),"w"); if(p==NULL) { QMessageBox::information(this,"错误","打开文件失败"); return; } else { // text1->toPlainText().toStdString().data();//将用户在控件中输入的字符串转化为const char * fputs(text1->toPlainText().toStdString().data(),p); fclose(p); }}void MainWindow::on_compile(){ QString content="#include<stdio.h>\n"; FILE *p=fopen(filename.toStdString().data(),"r"); if(p==NULL) return; while(!feof(p)) { char buf[1024]={0}; fgets(buf,sizeof(buf),p); content+=buf; } fclose(p); content.replace("111","int").replace("222","main").replace("333","{").replace("444","printf(\"hello jumfens\")").replace("8888","printf(\"\\n\");").replace("555","getchar();").replace("666","return").replace("777","}"); QMessageBox::information(this,"显示",content); // return ; QString destfilename=filename; destfilename.replace(".e",".c"); p=fopen(destfilename.toStdString().data(),"w"); fputs(content.toStdString().data(),p); fclose(p); QString srcname=destfilename; srcname.replace(".c",".exe"); QString command="gcc -o "+srcname +" "+destfilename; system(command.toStdString().data()); // remove(destfilename.toStdString().data()); //可以将中间生成的.c文件删除}void MainWindow::on_run(){ QString destfilename=filename; destfilename.replace(".e",".exe"); system(destfilename.toStdString().data());}可以输入自己风格的编程语言,然后保存,打开后可以编译生成.c文件,还可以生成.exe文件,最后运行文件。
0 0
- Qt实现自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- vim自己的IDE
- 树莓派实现自己的Qt HTTPserver
- QT编写简单的ide
- 编写自己的"IDE" [转]
- Qt Creator:跨平台的 Qt IDE
- Python适合自己的IDE才是最好的IDE
- Qt Embedded中如何实现自己的keyboard
- Qt Embedded中如何实现自己的keyboard
- Qt Embedded中如何实现自己的keyboard
- Qt Embedded中如何实现自己的keyboard
- Class.forName()、Class.forName().newInstance() 、New 三者区别
- webpack使用之自动刷新
- POJ1321棋盘问题(AC2)
- 图片圆形加阴影效果
- LeetCode 036 Valid Sudoku
- Qt实现自己的IDE
- 视频处理
- 读史心得——吹嘘和伪造的西方历史
- initWithFrame方法的理解
- 公司发展该时刻谨记的是什么
- Binary-safe 二进制安全
- css图像映射
- 登录页面在输入了正确的用户名和密码后仍跳转到登录页面而不是期望的系统首页面,debug的时候发现,登录页面调用的action类方法被调用了两次,后台无法获取前台页面传过来的参数。
- MapReduce编程实现txt文件中的内容导入HBase