域名訪問網(wǎng)站應該怎么做如何創(chuàng)建網(wǎng)站平臺
目錄
1.創(chuàng)建接口
2.創(chuàng)建插件
3.創(chuàng)建插件界面
4.插件實現(xiàn)
5.創(chuàng)建應用工程
6.應用插件
1.創(chuàng)建接口
打開QtCreater,點擊左上角“文件”->新建文件或項目,在彈窗中選擇C++/C++Header File。
輸入文件名,選好路徑(可自行設(shè)置名稱,路徑)。后面點擊下一步,完成就可以了。
在創(chuàng)建的文件中輸入以下內(nèi)容
class?MyPlugin?:?public?QObject
{Q_OBJECT
public:virtual?~MyPlugin(){}virtual?void?msgToPlugin(int)?=?0;?//插件接收消息
signals:void?msgFromPlugin(int);//插件發(fā)送消息
public:QWidget*?widget;?//插件界面接口指針
};
#define?MyPlugin_IID?"com.wyc.myplugin"
Q_DECLARE_INTERFACE(MyPlugin,?MyPlugin_IID);//將接口告訴Qt元對象系統(tǒng)
2.創(chuàng)建插件
再次點擊“文件”->新建文件或項目,選擇Library/C++ Library,
輸入名稱和路徑,其他沒展示的,都選擇默認,點下一步就可以了
添加上面生成的插件接口頭文件
修改pro前幾行
QT???????+=?core?gui
greaterThan(QT_MAJOR_VERSION,?4):?QT?+=?widgetsTEMPLATE?=?lib
DEFINES?+=?TEST_PLUGIN_UI_LIBRARY
CONFIG?+=?plugin
CONFIG?+=?c++11
3.創(chuàng)建插件界面
在test_plugin_ui項目上點擊右鍵,選擇Add new...,選擇設(shè)計師界面類,輸入名稱。
界面中添加控件,用來測試和主界面的通訊。
頭文件加入如下內(nèi)容:
signals:void?sendMsg(int);//發(fā)送消息
public?slots:void?recMsg(int);?//接收消息
private?slots:void?on_send_clicked();
在cpp文件中實現(xiàn)相應的收發(fā)功能。
至此插件界面就做好了。
4.插件實現(xiàn)
在之前創(chuàng)建的test_plugin_ui.h中加入頭文件:
#include?"myplugin.h"
#include?"pluginwidget.h"
在類中加入如下內(nèi)容:
class?TEST_PLUGIN_UI_EXPORT?Test_plugin_ui?:?public?MyPlugin
{Q_OBJECTQ_PLUGIN_METADATA(IID?"com.wyc.myplugin")Q_INTERFACES(MyPlugin)
public:Test_plugin_ui();~Test_plugin_ui();void?msgToPlugin(int);?//接收消息
private:PluginWidget?*?m_pluginWidget?=?0;
};
在cpp中初始化m_pluginWidget,并將其賦值給widget,外部界面可以通過widget指針使用插件里的界面.
m_pluginWidget?=?new?PluginWidget;
widget?=?m_pluginWidget;
QObject::connect(m_pluginWidget,?&PluginWidget::sendMsg,?this,?&Test_plugin_ui::msgFromPlugin);
實現(xiàn)函數(shù)void?msgToPlugin(int)后,點擊編譯圖標,即可生成.dll,.a文件
5.創(chuàng)建應用工程
創(chuàng)建應用工程
編譯器一定要選跟上面一樣的,其他都點“下一步”。
在ui文件中添加控件如下
右側(cè)的布局用來添加插件界面。
6.應用插件
將上面生成的.dll和.a兩個文件拷貝到相應的目錄,比如Debug,就拷貝到build-...-Debug下,Release就拷貝到build-...-Release下。
將接口文件myplugin.h添加到工程中。
在頭文件mainwindow.h中添加如下內(nèi)容:
#include?"myplugin.h"
public?slots:void?rectMsg(int?value);
private?slots:void?on_sendBtn_clicked();
private:MyPlugin?*m_plugin;
在mainwindow.cpp構(gòu)造函數(shù)中添加如下內(nèi)容:???
if(!QLibrary::isLibrary(("test_plugin_ui.dll"))){qDebug()<<"not?a?library";return;}QDir?dir("./test_plugin_ui.dll");qDebug()<<__LINE__?<<?dir.absolutePath();QPluginLoader?loader(dir.absolutePath());loader.load();qDebug()?<<?loader.errorString();m_plugin?=?qobject_cast<MyPlugin*>(loader.instance());if(m_plugin){ui->verticalLayout->addWidget(m_plugin->widget);connect(m_plugin,?&MyPlugin::msgFromPlugin,?this,?&MainWindow::rectMsg);}else{qDebug()<<__LINE__?<<?"error";}
并在cpp文件中實現(xiàn)相應的收發(fā)功能,運行即可。