【Qt:实现打开文件并展示在文本编辑器中】
Qt:实现打开文件并展示在文本编辑器中
- 1 在Qt中新建一个空项目
- 2 添加一个主窗口类
- 3 添加Main.cpp文件
- 4 在项目目录创建图标目标录
- 5 添加资文件,为快捷键添加图标
- 6 设计主窗口界面
- 7 打开mainwindow.h文件,设置信号和槽功能:
- 8 设置文件拖放到主窗口打开功能
1 在Qt中新建一个空项目
1)Ctrl+N新建空项目
2),双击.pro文件,添加下面的代码:
QT += widgets//引用了widget窗口类
RC_ICONS = heart.ico//创建了应用程序图标
3)制作一个应用程序图标,可以在阿里矢量库搜索下载:https://www.iconfont.cn/,存放在项目文件中。
2 添加一个主窗口类
1)选择项目,右击添加新文件,add new …–>C+±->C++ -->Class–>Choose。
3 添加Main.cpp文件
1)选择项目,右击添加新文件,add new …–>C+±->C++ Source Flie–>Choose
2)添加必要的代码
4 在项目目录创建图标目标录
可以在阿里矢量库搜索下载:https://www.iconfont.cn/
5 添加资文件,为快捷键添加图标
1)回到文件栏目,右击项目添加新文件,选择Qt–Qt Resource File,确定。
2)回到项目中,打开资源文件.qrc,添加前缀,也可删去,再点击添加文件,全选,打开,确定。完成后Ctrl+S保存该文档。
6 设计主窗口界面
1)打开mainwindow.h文件,输入下面的代码,定义菜单、工具、文本编辑器:
2)打开mainwindow.cpp文件,构造变量:
输入下面的代码
7 打开mainwindow.h文件,设置信号和槽功能:
输入:
public slots:
void opneFile();
<1>选中openFile点击右键,重构refactor->在mainwindow.cpp中添加定义,回车,或者Alt+Enter->在mainwindow.cpp中添加定义,回车。
<2>在mainwindow.cpp中,添加头文件:
#include <QFileDialog>
#include <QTextStream>
#include <QDebug>
#include <QMessageBox>
<3>同文件内,设计openFile的槽函数:
void mainwindow::openFile() //打开文件的槽函数
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/app", tr("Text Files (*.*)")); //打开*.*所有类型的文本文件
qDebug() << fileName; //获取文件路径
if (!fileName.isEmpty()){
QFile file(fileName); //不为空,创建文件对象
if (!file.open(QFile::ReadOnly | QFile::Text)){
QMessageBox::warning(this, tr("Warning!!!"), tr("can't read file %1: \n %2.")
.arg(fileName).arg(file.errorString())); //无法读取文件提示
}else {
QTextStream in(&file); //打开成功,创建文本流
textEdit->setText(in.readAll()); //读取所有文件内容到in,并显示在文本编辑器中
setWindowTitle(fileName); //设置标题为文件名
}
}
}
<3>同文件内,mianwindow主程序中,关联openFile信号和槽函数
//关联openFile信号和槽
connect(action_O, &QAction::triggered, this, &mainwindow::openFile); //动作、触发、当前主窗口,槽函数
<4>Ctrl+R,运行效果如下:
<5>同文件内,mianwindow主程序中,关联close信号和槽函数
//关联退出动作信号和槽
connect(action_Q, &QAction::triggered, this, &mainwindow::close);
8 设置文件拖放到主窗口打开功能
动作分别为拖入、放下
1)在mainwindow.h中申明这两个函数:
protected :
void dragEnterEvent(QDragEnterEvent *event);
void jdropEvent(QDropEvent *event);
- Alt+Enter,选择在mianwindow.cpp中添加定义,
添加头文件:
#include <QDragEnterEvent>
#include <QUrl>
#include <QMimeData>
#include <QStatusBar>
3)在mianwindow.cpp中添加拖放事件的定义
void mainwindow::dragEnterEvent(QDragEnterEvent *event) //拖入事件
{
if (event->mimeData()->hasUrls()) //检查拖放是否存在路径
event->accept();
else{
event->ignore();
}
}
void mainwindow::jdropEvent(QDropEvent *event) //放下事件
{
const QMimeData *mimeData = event->mimeData(); //获取事件内容
if(mimeData->hasUrls()) {
QList<QUrl> urlList = mimeData->urls();
QString fileName = urlList.at(0).toLocalFile(); //读取第一个地址
if (!fileName.isEmpty()) { //打开文件
QFile file(fileName);
if(!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Warning!!!"), tr("can't read file %1: \n %2.")
.arg(fileName).arg(file.errorString()));
} else {
QTextStream in(&file);
textEdit->setText(in.readAll());
setWindowTitle(fileName);
}
}
}
}
4)在mainwindow.cpp的主程序中,添加允许放下:
//接收放下操作
setAcceptDrops(true);
5)Ctrl+R,运行效果如下:
注意,拖放只针对主窗口,如果拖到文本编辑器范围,是不会打开文件的
知识推荐号: 没遇到过哎
晴甜: 你好,我vscode打开了自带的tensorboard会话,然后vscode都关了,网页进入localhost:6006还能查看,我lsof -i:6006显示没有进程占用6006,ps -ef | grep tensorboard也没有tensorboard进程,而且我重新开一个新的tensorboard --logdir=logs选了子文件夹显示为我启用了6006端口,结果网页打开6006日志目录还是之前vscode中默认的项目文件夹,网上找了好久都没解决办法气死我了
知识推荐号: 无法启动可以看看博客里说的处理办法
qq_51438390: 请问下,为什么一直无法启动tensorboard,报错超过60秒
king_sit_1: 帮大忙了,哥