目錄前言
效果編寫dll
編寫主程式 總結
編寫乙個dll,裡面包含乙個qdialog對話方塊作為主視窗。該dll提供四個介面,它們的作用分別是
1 開啟主視窗
2 關閉主視窗
3 更新外掛程式資料(暫不討論)
4 呼叫外掛程式中的函式並獲取返回值(暫不討論)
然後由主程式呼叫dll,並將dll中的視窗嵌入自己的對話方塊中,並實現自適應。
1 建立乙個qt library工程名為test,然後再插入乙個qdialog名為testwidget。
此時工程中目錄有以下檔案:
3 編寫介面
在test.h編寫介面函式定義,在test.cpp中實現。
其中全域性變數g_ptestwidget是為了防止重複開啟或者關閉。
**如下:
#ifndef test_h
#define test_h
#include "test_global.h"
#include "testwidget.h"
class test_export test
;#ifdef __cplusplus
extern "c"
#endif
#endif // test_h
至此外掛程式部分的任務完成了。#include "test.h"
testwidget *g_ptestwidget = null;
test::test()
test::~test()
void test_export pluginstart(void *lparentwidget)
if (null != lparentwidget)
g_ptestwidget->show();
}void test_export pluginclose(bool bcompleteclose)
else
}}void test_export pluginupdate(void *update)
test_export const char* pluginfunction(const char* input)
主程式為乙個qwidget視窗,我們要將載入的qdialog視窗放進widget控制項裡,並使他相對於widget實現自適應。因此我們需要
子類化widget控制項(qwidget),重寫他的resizeevent。
qresizingwidget繼承自qwidget:
#ifndef qresizingwidget_h
#define qresizingwidget_h
#pragma once
#include class qresizingwidget : public qwidget
;#endif
主程式qwidget如下:#include "qresizingwidget.h"
#include #include #include qresizingwidget::qresizingwidget(qwidget *parent /*= 0*/)
: qwidget(parent)
qresizingwidget::~qresizingwidget()
void qresizingwidget::resizeevent(qresizeevent* sevent) }}
void qresizingwidget::paintevent(qpaintevent *sevent)
也以同樣的布局方式設定自適應。
下面編寫載入函式,用qlibrary顯示載入dll,首先定義四個與dll中介面一致的函式指標。
**如下:
至此主程式編寫完畢。#include "testdll.h"
#include #include typedef void (*fun_start)(void *lparentwidget);
typedef void (*fun_close)(bool bcompleteclose);
typedef void (*fun_update)(const char *update);
typedef const char* (*fun_callback)(void *input);
fun_start g_start = null;
fun_close g_end = null;
qlibrary mydll;
testdll::testdll(qwidget *parent)
: qwidget(parent)
testdll::~testdll()
void testdll::load()
else
}}void testdll::unload()
}
如果主程式需要整合多個外掛程式呢?那就要設計乙個外掛程式管理工具,下次再講。
Qt 選單呼叫視窗
通過qt的選單選項呼叫另外乙個子視窗,有兩種方法 vs 2008 qt4.7 專案檔案 mainwindow.ui mainwindow.h mainwindow.cpp 1 手動呼叫視窗 a 在mainwindow.h中宣告兩個函式,在mainwindow.cpp中定義該兩個函式。void mai...
QT實現視窗圓角
實現上邊角圓弧 setwindowflags qt framelesswindowhint qbitmap bmp this size bmp.fill qpainter p bmp p.setpen qt nopen p.setbrush qt black p.setrenderhint qpai...
Qt 實現分割視窗並國際化
qt中提供了qsqlitter類實現分割視窗,分割視窗可以靈活分布視窗的布局,經常用於類似檔案管理器的視窗設計中。qt中提供qtranslator類和qlinguist工具進行國際化。本例項實現乙個分割視窗,並國際化。國際化前 國際化後 建立qslitter的物件,首先是橫向的主分割視窗 qt ho...