目录
ui布局:
整体
combo Box
(右下角)
上方三个图标按钮样式表
// 格式一样只是,插入图片不同
废话少说,放码过来
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QFileDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
QFile qfile;
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_openButton_clicked();
void on_saveButton_clicked();
void on_closeButton_clicked();
void onCurrentIndexChanged(int index);
void cursorPositionChanged();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
Widget.cpp
#include "widget.h"
#include "ui_widget.h"
//构造函数
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) //初始化列表来构造
{
ui->setupUi(this); //设置QTdesigner 里面的ui 关联到widget类的私有变量ui里面
//虽然上面这行代码进行了widget 和 ui 窗口的关联,但是如果发生窗口大小变化的时候,里面的的布局不会随之改变
//通过下面这行代码进行显示说明,让窗口变化时,布局及其子控件随之调整
this->setLayout(ui->verticalLayout);
// ui->widgetBottom->setLayout(ui->horizontalLayout);
// 关联ComboBox
connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(onCurrentIndexChanged(int)));
// 关联文本框光标改造
connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(cursorPositionChanged()));
}
//析构函数
Widget::~Widget()
{
delete ui;
}
void Widget::on_openButton_clicked()
{
// 先打开文件
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), // this --> 指定当前的Widget对象 ,作用打开文件
"F:/myqt/project_of_qt_new", // 默认打开的路径
tr("Text (*.txt)"));//限制能打开文件的格式
this->setWindowTitle(fileName +"-mxjun notebook");
ui->textEdit->clear(); // 清空文本框,避免上次读取的干扰
qfile.setFileName(fileName);
if(!qfile.open(QIODevice::ReadOnly | QIODevice::Text)) // Text --> 对\n 做检查,win系统下会转化为\r\n,对换行读取更好
{
qDebug()<<"Open Error";
}
QTextStream in(&qfile);
//in.setCodec("UTF-8"); //设置编码格式
// in.setCodec("ANSI"); // 参数需要是char * 类型 --> 我们需要把QStrng 转化为char*
QString str =ui->comboBox->currentText(); // 获得编码格式
const char * c_str =str.toStdString().c_str();// 先把 QString 类型转化为C++中的String,然后c_str()转化为 const char *类型
in.setCodec(c_str);
// 读取多行
while (!in.atEnd()) {// 当没到文件尾部
QString context =in.readLine(qfile.size());// 每次读一行
//qDebug() << qPrintable(context);//qPrintable -- 过滤掉 ""
//将读取到的内容写入我们的 文本框内 -- textEdit, 调用 setText()
//ui->textEdit->setText(context);//setText --> 作用于真个textEdit 控件-- 覆盖作用 --导致多行的情况下只能读取到一行
ui->textEdit->append(context);// 以追加的方式读取,能读取到多行
}
//qfile.close(); // 这里不用关闭,我们后续close 按钮会关闭
}
void Widget::on_saveButton_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),//设置为保存文件模式
"F:/myqt/project_of