关于ui界面的简单搭建
- 首先先创建新项目
点击创建界面
注意:项目名称不要出现中文
2.在项目中点击界面文件
进入ui设计
输入名称
注意:箭头指向的object action不能用中文
可以在这里进行修改文本名称(在这可以修改为中文)
则ui界面上的文字就变为中文
但是现在的ui界面上并不能写内容,这就要加入Text Edit,在工具栏中可以找到,添加到ui界面上
虽然添加了文本编辑,但是文本编辑的编辑范围大小并不能随着ui界面的拖拽拉长而增大。
这时就需要点击Text Edit在ui上的界面,再点击后面的界面
再点击上面的垂直分布就能实现,但是实现的还是存在一点间隔,为了消除间隔
点击对象中的centralWidget
然后在下面的属性栏中找到Layout
把圈主的属性数值进行修改,就该为零,ui界面就没有边框了
可以在属性栏中的windowsTitle中为ui窗口命名
之后我们为ui界面加入图标:
先把下载好的图标放到程序的文件中
再回到qt中点击左边的编辑回到程序中在(程序名).pro。程序中加入RC_ICONS =图标名称(加上后缀)
当然也有另一种方法加入图标:
先进入ui设置界面,点击右边的mainwindow,之后在属性栏中找到windowicon后面的值,在旁边的倒三角符号中选择 选择文件,再把图标拖拽到那,就完成了
2.为ui界面添加功能:
点击左边的编辑进入源文件,这里的源文件有两个,一般是在mainwindow.cpp中进行编译的。
开始为之前的项目编写功能,先进入ui设计界面,在ui界面的下方右击文本名称,再点击转到槽,选择triggered() QAction这个信号,点击ok,就可以进行编辑
关于各个功能的程序:
为了方便使用我们把保存文件写为一个函数
点击头文件添加
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionDakai_triggered();
void on_actionBaocun_triggered();
void on_actionXinjian_triggered();
void on_actionTuichu_triggered();
void on_actionChexiao_triggered();
void on_actionFuzhi_triggered();
void on_actionZhantie_triggered();
void on_actionJiantie_triggered();
void saveFile(const char *file,const char *buf);
void on_actionBianji_triggered();
void on_actionLingcunwei_triggered();
private:
Ui::MainWindow *ui;//添加的语句
};
#endif // MAINWINDOW_H
之后再点击mainwindow.cpp进行编写
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextCodec>
//转码头文件
#include <QFileDialog>
//打开文件对话框头文件
#include <QString>
#include <QDebug>
//#include <QByteArray>//另一种转码头文件
#include <string.h>
#define cout qDebug()//打印log日志或断点
QString fileName=NULL;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
//保存文件
void MainWindow::saveFile(const char *file,const char *buf)
{
FILE *fp=fopen(file,"w");
if(!fp)
return;
//读取文本信息
// QString txt = ui->textEdit->toPlainText();
//转成char *类型
// const char *buf=txt.toStdString().data();
//保存文件
fputs(buf,fp);
fclose(fp);
}
//打开文件
void MainWindow::on_actionDakai_triggered()
{
//打开文件
/*1.fopen(文件名,打开方式)
* 2.判断可用性
* 3.读取内容
* 4.关闭
*/
//通过对话框打开文件,获取文件路径(GBK),此时文件是QString类型
fileName=QFileDialog::getOpenFileName();//打开文件对话框
//cout<<"===="<<fileName<<"====";
//printf
QTextCodec * codec=QTextCodec::codecForName("GBK");
//GBK,文件地址的编码格式是GBK的
char *file =codec->fromUnicode(fileName).data();
//将QString类型转化成char *类型
//另一种转码方式
//QByteArray ba=fileName.toLatin1();//将QString转换为QByteArray类型
//char *file=ba.data();//再将QByteArray类型转化为char *类型
FILE *fp=fopen(file,"r");
if(!fp)
return;//由于是void类型不加返回值
cout<<"open file successfully!"<<endl;
//endl相当于换行
char buf[1024];
QString txt;
while(!feof(fp))
{
memset(buf,0,1024);
fgets(buf,1024,fp);
//cout<<buf;
txt +=codec->toUnicode(buf);//将char *类型转化成QString类型,并加到txt中
//为了读取中文所采取的
}
ui->textEdit->setText(txt);//为文本输入标签设置内容
fclose(fp);
}
void MainWindow::on_actionBaocun_triggered()
{
if(fileName==NULL)
//打开文件
fileName=QFileDialog::getSaveFileName();
//转码
QTextCodec *codec=QTextCodec::codecForName("GBK");//utf-8 GBK GB2312支持中文
char *file=codec->fromUnicode(fileName).data();
//读取文本信息
QString txt = ui->textEdit->toPlainText();
//转成char *类型
const char *buf=txt.toStdString().data();
saveFile(file,buf);
}
//新建文件
void MainWindow::on_actionXinjian_triggered()
{
//ui->textEdit->setText("");
//提示用户保存
ui->textEdit->clear();
fileName.clear();//重置为空
}
//退出
void MainWindow::on_actionTuichu_triggered()
{
//提示用户保存
exit(0);
}
//撤销
void MainWindow::on_actionChexiao_triggered()
{
//撤销
ui->textEdit->undo();
}
//拷贝
void MainWindow::on_actionFuzhi_triggered()
{
//拷贝
ui->textEdit->copy();
}
//粘贴
void MainWindow::on_actionZhantie_triggered()
{
//粘贴
ui->textEdit->paste();
}
剪贴
void MainWindow::on_actionJiantie_triggered()
{
//剪切
ui->textEdit->cut();
}
//编译
void MainWindow::on_actionBianji_triggered()
{
/*1.保存文件(如果文件保存)
* 2.组装gcc格式
* 3.编译(如果出错提示错误信息) 运行程序
*/
if(fileName==NULL)
{
fileName=QFileDialog::getSaveFileName();
QTextCodec *codec=QTextCodec::codecForName("GBK");
const char *file=codec->fromUnicode(fileName).data();
QString txt=ui->textEdit->toPlainText();
const char *buf=txt.toStdString().data();
saveFile(file,buf);
}
else
{
QString des=fileName;
des.replace(".c",".exe");//用.exe替换.c
char comm[1024]="gcc -o";
strcat(comm,des.toStdString().data());//在comm后追加.exe文件
strcat(comm," ");
strcat(comm,fileName.toStdString().data());//在之后的comm中追加fileName文件,注意后缀
if(!system(comm))
{
char cmd[256]="cmd ";
strcat(cmd,des.toStdString().data());
}
cout<<"compile successfully!";
}
}
//另存为
void MainWindow::on_actionLingcunwei_triggered()
{
//打开文件
fileName=QFileDialog::getSaveFileName();
//转码
QTextCodec *codec=QTextCodec::codecForName("GBK");//utf-8 GBK GB2312支持中文
char *file=codec->fromUnicode(fileName).data();
//读取文本信息
QString txt = ui->textEdit->toPlainText();
//转成char *类型
const char *buf=txt.toStdString().data();
saveFile(file,buf);
}
这就完成了几个简单的功能