【QT】單文件程式
阿新 • • 發佈:2019-02-18
single document 單文件程式,類似於word這類開啟一個視窗即為一個文件。區別於類似Notepad++的多文件程式。
- string 和 char[] 、char* 之間的轉換
例如:
string str;
char * buf;
string–>char* :
buf=str.c_str();
// 這裡返回的是字串首地址 char*
char* –>string :
str=buf;
//char* 、char[] 可直接賦值給string
- 程式碼
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QFileDialog>
#include <QDebug>
#include <string>
#include <GBK.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->action_new,SIGNAL(triggered(bool )),this,SLOT(OnMenuNew()));
connect(ui->action_open,SIGNAL(triggered(bool)),this,SLOT(OnMenuOpen()));
connect(ui->action_save,SIGNAL(triggered(bool)),this,SLOT(OnMenuSave()));
m_label=new QLabel(this);
ui->statusBar->addWidget(m_label);
m_label->setText(tr("檔名:初始化" ));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::OnMenuNew()
{
filepath="";
ui->m_plainedit->clear();
m_label->setText(tr("檔名:初始化"));
}
int MainWindow::OnMenuOpen()
{
//選擇檔案
QString filepath=QFileDialog::getOpenFileName(this,tr("讀取檔案"));
if (filepath.length()==0) return -1;
//讀取檔案內容
string gbk_filepath=GBK::FromUnicode(filepath);
FILE* fp=fopen(gbk_filepath.c_str(),"rb");
char buf[512]; //快取區 大小視檔案而定
int n=fread(buf,1,512,fp); //將fp檔案內容讀入buf快取區內
buf[n]=0; //將讀入的下一個字元用'\0'佔位 表示字串
fclose(fp);
//顯示到介面
QString text= GBK::ToUnicode(buf);
ui->m_plainedit->setPlainText(text);
//顯示到狀態列
m_label->setText(tr("已經開啟"));
m_label->setText(filepath);
return 0;
}
int MainWindow::OnMenuSave()
{
//選擇檔案
QString filename=QFileDialog::getSaveFileName(this,tr("儲存檔案"),tr("untitled.txt"));
if(filename.length()==0) return -1;
//儲存檔案
string gbk_filename=GBK::FromUnicode(filename);
FILE *fp=fopen(gbk_filename.c_str(),"wb");
string text=GBK::FromUnicode(ui->m_plainedit->toPlainText());
fwrite(text.c_str(),1,text.length(),fp);
fclose(fp);
m_label->setText(filename);
return 0;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QLabel>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QString filepath;
private slots:
void OnMenuNew();
int OnMenuOpen();
int OnMenuSave();
public:
QLabel *m_label;
};
#endif // MAINWINDOW_H
圖片是ui介面設計
編譯環境:QT Creator 5.5.1