增加获取文本编码,但是没有解决乱码问题

This commit is contained in:
sonichy 2017-10-31 09:11:05 +08:00
parent 7e32465f5b
commit 7851de1e8b
7 changed files with 46 additions and 13 deletions

BIN
HTYEdit

Binary file not shown.

View File

@ -11,7 +11,6 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = HTYEdit
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
mdichild.cpp \

View File

@ -1,7 +1,9 @@
# Qt 海天鹰编辑器
![alt](preview.png)
Linux 平台基于 Qt 的文字编辑程序。
已编译好的 HTYEdit 程序适用 64 位 Linux 系统 Qt5 环境,双击运行,其他版本请自行编译。
![alt](preview.png)
### 1.1 [新增语法高亮](http://www.cnblogs.com/lenxvp/p/5475931.html)
高亮类具体工作过程没看懂,因为很好用先用着。

View File

@ -23,19 +23,23 @@ MainWindow::MainWindow(QWidget *parent) :
ui->setupUi(this);
QDesktopWidget* desktop = QApplication::desktop();
move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
LS1=new QLabel("欢迎使用海天鹰编辑器!");
LS1 = new QLabel("欢迎使用海天鹰编辑器!");
LS1->setMinimumSize(500,20);
LS1->setStyleSheet("padding:0px 3px;");
//LS1->setFrameShape(QFrame::WinPanel);
//LS1->setFrameShadow(QFrame::Sunken);
LS2=new QLabel("行,列:");
LS2 = new QLabel("行,列:");
LS2->setMinimumSize(20,20);
LS2->setStyleSheet("padding:0px 3px;");
//LS2->setFrameShape(QFrame::WinPanel);
//LS2->setFrameShadow(QFrame::Sunken);
LS2->setStyleSheet("padding:0px 3px;");
LS3 = new QLabel("编码");
LS3->setMinimumSize(20,20);
LS3->setStyleSheet("padding:0px 3px;");
ui->statusBar->addWidget(LS1);
ui->statusBar->addWidget(LS2);
ui->statusBar->addWidget(LS3);
connect(ui->action_quit, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(ui->mdiArea,SIGNAL(subWindowActivated(QMdiSubWindow*)),this,SLOT(subWindowActivate(QMdiSubWindow*)));
dialogFind = new DialogFind(this);
connect(dialogFind->ui->btnCancel,SIGNAL(clicked(bool)),dialogFind,SLOT(close()));
@ -70,7 +74,7 @@ void MainWindow::on_action_about_triggered()
void MainWindow::on_action_changelog_triggered()
{
QString s = "1.1\n2017-10\n排版实验。\n用文本框代替消息框显示更新日志。\n2017-07\n增加拖放打开文件。\n2017-06\n增加语法高亮。\n提取打开文件的相对路径使Markdown预览能够载入相对路径图片。\n\n1.0\n2017-03\n支持命令行打开文件和打开方式打开文件。\n查找窗口填入选中文本。\n2017-02\n根据文件扩展名选择语法高亮方案。\nJS语法高亮实验成功\nHTML语法高亮实验成功\n增加设置字体。\n设置状态栏左右边距。\n2017-01\n实现全部替换。\n设置循环查找。\n增加查找替换窗体和功能。\n根据文件扩展名决定是否使用默认程序打开如htm。\n优化保存、另存为和文本修动标题标记逻辑。\n增加撤销,重做,子窗标题文本改动标识。\n增加子窗体类实现Ctrl+滚轮缩放和保存打开文件的路径。\n增加使用默认程序预览文件。\n把上一个打开或保存的路径设置为打开或保存对话框的默认路径和文件名。\n增加放大、缩小。\n增加文本光标变化信号,光标所在行列显示在状态栏第二栏。\n状态栏分为2栏\n修复没有子窗口时预览引起的崩溃。\n增加预览功能。\n保存成功。\n修改字体颜色,背景色成功。\n新建文件成功,打开文件载入成功。\n选用QMdiArea作为主控件增加窗口标签、平铺、层叠菜单。 \n制作主要菜单。";
QString s = "1.1\n2017-10\n增加获取文本编码(使用 file --mime-encoding 命令返回),但是没有解决乱码问题。\n排版实验。\n用文本框代替消息框显示更新日志。\n2017-07\n增加拖放打开文件。\n2017-06\n增加语法高亮。\n提取打开文件的相对路径使Markdown预览能够载入相对路径图片。\n\n1.0\n2017-03\n支持命令行打开文件和打开方式打开文件。\n查找窗口填入选中文本。\n2017-02\n根据文件扩展名选择语法高亮方案。\nJS语法高亮实验成功\nHTML语法高亮实验成功\n增加设置字体。\n设置状态栏左右边距。\n2017-01\n实现全部替换。\n设置循环查找。\n增加查找替换窗体和功能。\n根据文件扩展名决定是否使用默认程序打开如htm。\n优化保存、另存为和文本修动标题标记逻辑。\n增加撤销,重做,子窗标题文本改动标识。\n增加子窗体类实现Ctrl+滚轮缩放和保存打开文件的路径。\n增加使用默认程序预览文件。\n把上一个打开或保存的路径设置为打开或保存对话框的默认路径和文件名。\n增加放大、缩小。\n增加文本光标变化信号,光标所在行列显示在状态栏第二栏。\n状态栏分为2栏\n修复没有子窗口时预览引起的崩溃。\n增加预览功能。\n保存成功。\n修改字体颜色,背景色成功。\n新建文件成功,打开文件载入成功。\n选用QMdiArea作为主控件增加窗口标签、平铺、层叠菜单。 \n制作主要菜单。";
QDialog *dialog = new QDialog;
dialog->setWindowTitle("更新历史");
dialog->setFixedSize(400,300);
@ -427,3 +431,16 @@ void MainWindow::dropEvent(QDropEvent *e) //释放对方时,执行的操作
open(fileName);
}
void MainWindow::subWindowActivate(QMdiSubWindow *window)
{
if(window){
MdiChild *child = (MdiChild*)(window->widget());
LS1->setText(child->path);
LS3->setText(child->scodec);
}else{
LS1->setText("");
LS2->setText("");
LS3->setText("");
}
}

View File

@ -5,6 +5,7 @@
#include "ui_dialogfind.h"
#include <QMainWindow>
#include <QDragEnterEvent>
#include <QMdiSubWindow>
namespace Ui {
class MainWindow;
@ -22,7 +23,7 @@ public:
private:
void open(QString filename);
QLabel *LS1,*LS2;
QLabel *LS1,*LS2,*LS3;
QString filename,path;
DialogFind *dialogFind;
@ -55,6 +56,7 @@ private slots:
void replace();
void replaceAll();
void cursorPositionChange();
void subWindowActivate(QMdiSubWindow *window);
};
#endif // MAINWINDOW_H

View File

@ -7,6 +7,8 @@
#include <QMessageBox>
#include <QFileInfo>
#include <QDebug>
#include <QTextCodec>
#include <QProcess>
MdiChild::MdiChild()
{
@ -32,8 +34,16 @@ void MdiChild::wheelEvent(QWheelEvent *e)
bool MdiChild::loadFile(QString filename)
{
path = filename;
path = filename;
setWindowTitle(QFileInfo(filename).fileName() + "[*]");
// 检测编码
QProcess *process = new QProcess;
process->start("file --mime-encoding " + filename);
process->waitForFinished();
QString PO = process->readAllStandardOutput();
scodec = PO.mid(PO.indexOf(": ") + 2).replace("\n","").toUpper();
//qDebug() << scodec;
QFile *file = new QFile;
file->setFileName(filename);
bool ok = file->open(QIODevice::ReadOnly);
@ -43,14 +53,17 @@ bool MdiChild::loadFile(QString filename)
plt.setBrush(QPalette::Base,QBrush(Qt::black));
setPalette(plt);
QTextStream ts(file);
// 还是乱码
QTextCodec *codec = QTextCodec::codecForName(scodec.toLatin1());
ts.setCodec(codec);
QString s = ts.readAll();
setVisible(true);
file->close();
delete file;
setPlainText(s);
Highlighter *highlighter = new Highlighter(document());
Q_UNUSED(highlighter);
showMaximized();
zoomIn(4);
zoomIn(4);
return true;
}else{
QMessageBox::warning(this,"错误", QString(" %1:\n%2").arg(path).arg(file->errorString()));

View File

@ -10,7 +10,7 @@ public:
MdiChild();
bool loadFile(QString);
bool save();
QString path;
QString path, scodec;
protected:
void wheelEvent(QWheelEvent*);