QT編寫視窗外掛程式,並實現呼叫視窗的自適應

2021-09-20 04:07:51 字數 2824 閱讀 5935

目錄前言

效果編寫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

#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)

主程式qwidget如下:

也以同樣的布局方式設定自適應。

下面編寫載入函式,用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...