声明我的配置是
1.我在的系统是win7 64位的操作系统 2G内存
2.已安装了vs2010旗舰版
3.顺序安装 后面的是我的安装路径
1. qt-win-opensource-4.8.2-vs2010.exe
2. qt-vs-addin-1.1.11-opensource.exe
3. qt-creator-win-opensource-2.5.0.exe
4.编译器是vs2010的 win32-msvc2010
开始写动态链接库help.dll 这是一个调用Qt Assistant的一个dll,有关调用assistant的请参考《Qt Assistant的调用给我们的程序添加help》
1.打开Qt Creator ->新建->Libraries->C++库->选择->(类型)共享库/名称help->下一步->下一步->选择你要用到的Qt库 本blog这个例子用QtGui /QtCore->下一步->下一步
2.把help.h改成如下
****************************************************************************************************************
/* * @2012-10-9 */ #ifndef HELP_H #define HELP_H #include <QtCore/QString> #include "help_global.h" class QProcess; class HELPSHARED_EXPORT Help { public: Help(); ~Help(); void showDocumentation(const QString &file); private: bool startHelp(); QProcess *m_proc; }; #endif // HELP_H
*********************************************************************
3.help.cpp改成如下
/* * @2012-10-9 * 帮助文档核心调用assistant.exe */ #include <QtCore/QByteArray> #include <QtCore/QDir> #include <QtCore/QProcess> #include <QtGui/QMessageBox> #include "help.h" Help::Help() : proc(0) { } Help::~Help() { if (proc && proc->state() == QProcess::Running) { proc->terminate(); proc->waitForFinished(3000); } delete proc; } void Help::showDocumentation(const QString &page) { if (!startHelp()) return; //首页显示 QByteArray ba("SetSource "); ba.append("qthelp://com.PeralGlobal.RobotWorkbench.help/doc/"); proc->write(ba + page.toLocal8Bit() + '\n');}bool Help::startHelp(){ if (!proc){ proc = new QProcess(); } if (proc->state() != QProcess::Running){ QDir dir; //获取assistant.exe的路径 QString app = dir.currentPath() + QDir::separator(); app += QLatin1String("assistant.exe"); //执行命令 QStringList args; args << QLatin1String("-collectionFile") << dir.currentPath() + QLatin1String("/documentation/help.qhc") << QLatin1String("-enableRemoteControl"); //执行进程 proc->start(app, args); if (!proc->waitForStarted()){ QMessageBox::critical(0, QObject::tr("RobotWorkbench Help"), QObject::tr("Unable to launch Robot Workbench Assistant (%1)").arg(app)); return false; } } return true; }
*********************************************************************
4.构建help.pro工程在相应的目录下debug下生成如下文件。>help.dll //就是我们程序要的dll动态链接库,程序发行时所用到的。真正代码所在的位置,实现的方式。>help.exp //只有生成dll是才会生成这个exp文件 ,exp就是导出文件(export file)包含导出函数和数据项的信息。>help.ilk //当选定渐增型编译连接时,连接器自动生成ilk文件,记录连接信息LINK工具使用。>help.intermediate.manifest //Manifest文件保存了Windows可执行文件(包括exe和dll文件)要运行起来的环境设置信息,文件名一般是可执行文件的文件全名加上.manifest。例如notepad.exe的manifest文件就应该是notepad.exe.manifest。例外有的程序将manifest文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候你看不到程序的manifest文件的原因。>help.lib //lib是静态的库文件,在编译的时候要编译进去的,运行时就不需要lib了,此时这个lib里面是一些索引信息。
>help.obj //lib就是一堆obj的组合,每一个.cpp都会生成一个obj,目标文件,一般是程序编译后的二进制文件,再通过连接器和资源文件链接就成exe文件了
>help.pdb //帮助我们调试用的。http://www.cnblogs.com/itech/archive/2011/08/15/2136522.html
*******************************************************************************
5.写一个测试程序调用这个dll
新建工程Qt Gui应用程序->各种下一步-> 名字helpPushbutton
6..h文件
*******************************************************************************
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H******************************************************************7.cpp文件******************************************************************#include "mainwindow.h" #include "ui_mainwindow.h" #include "help.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { Help *help = new Help; help->showDocumentation("helpintro.html"); }********************************************************************8.pro文件********************************************************************QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = helpPushbutton TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui INCLUDEPATH += ./ LIBS +=./help.libINCLUDEPATH += ./ //这个告诉我们的应用程序help.h和help_global.h的路径,你可以把它考到当前工程目录下。像我这样就可以了LIBS +=./help.lib //我在编译的时候要用lib,告诉程序接口是哪个。也把它放到pro的当前的目录下,当然你也可以写自己的目录,注意路径正反斜杠!!!!!!!!!!!!!!!!!!!
****************************************************************9.点击构建。运行发现什么都没有,???10.拷贝help.dll到helpPushbutton的debug下,还有assistant.exe还有assistant.exe启动相关的dll。还有文件夹documentation,文件夹内的help.qch,help.qhc相关参考《Qt Assistant的调用给我们的程序添加help》