1. 程式人生 > >【QT】單文件程式

【QT】單文件程式

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