通过QT实现点击按钮打开Word文档,需要用到QProcess,在程序中加入#include <QProcess>。
代码:
.h文件
#ifndef SIDEBAR_H
#define SIDEBAR_H
#include <QWidget>
#include <QProcess>
#include <QFileInfo>
namespace Ui {
class SideBar;
}
class SideBar : public QWidget
{
Q_OBJECT
public:
explicit SideBar(QWidget *parent = nullptr);
~SideBar();
private slots:
void on_usermanual_clicked();
void OnFinishProc(int, QProcess::ExitStatus);
private:
Ui::SideBar *ui;
QString m_filePath;
};
#endif // SIDEBAR_H
.cpp文件
#include "SideBar.h"
#include "ui_SideBar.h"
#include <QProcess>
#include <QMessageBox>
SideBar::SideBar(QWidget *parent) :
QWidget(parent),
ui(new Ui::SideBar)
{
ui->setupUi(this);
//文件路径
m_filePath = "D:/QTproject/SAR/code/resources/userguide.docx";
}
SideBar::~SideBar()
{
delete ui;
}
void SideBar::on_usermanual_clicked()
{
QFileInfo fileInfo(m_filePath);
if (!fileInfo.exists())
{
// 文件不存在,提示用户
QMessageBox::warning(this, "File not found", "The file 'userguide.docx' was not found.");
}
else
{
QString program = "\"C:\\Program Files\\Microsoft Office\\root\\Office16\\WINWORD.EXE\"";
QProcess *proc = new QProcess(this);
QStringList list;
list<<QString(m_filePath);
proc->start(program,list);
connect(proc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(OnFinishProc(int, QProcess::ExitStatus)));
}
}
void SideBar::OnFinishProc(int, QProcess::ExitStatus)
{
QProcess * proc = (QProcess *)sender();
delete proc;
}
1.word文档通过WINWORD.EXE打开,在QProcess::start中要写明其路径;
2.#include <QFileInfo> 用来判断文件路径是否存在。
3.当用户关闭word文档时,WINWORD.EXE进程就结束了。但是proc变量仍然存在,其仍然占据一块内存。当WINWORD.EXE进程结束时,proc会发出一个信号finished。利用这个信号,触发槽函数OnFinishProc,就可以释放proc。
4.WINWORD.EXE的路径中有空格,需要加上“\”。
参考文章:Qt利用QProcess启动进程实例(打开一个word文档)_qprocess打开文件_金色熊族的博客-CSDN博客