簡體   English   中英

使用C程序中的Qt庫

[英]Using a Qt library from a C program

Qt非常適合構建應用程序,但有一兩次我想用純C編寫的現有應用程序顯示一個很好的Qt對話框。

我想描述如何創建一個Qt-unaware程序可以使用的基於Qt的共享或靜態庫。 為了縮小問題范圍,讓我們假設我們調用一個顯示一些對話框或小部件的函數,並且在所有對話框都關閉之前不會返回。 否則,如果沒有來自托管過程的一些“合作”,它就無法完成 - 它必須至少為Qt運行消息泵。

在這個例子中,我將使用Windows程序rundll32.exe來加載和執行一個顯示Qt about對話框的函數。

假設我們的DLL名為MyQtBasedDll.dll ,它有一個導出函數 - void MyEntryPoint()

我們將使用命令行rundll32.exe MyQtBasedDll.dll,MyEntryPoint運行它。 請注意,您需要為exe和dll提供完整路徑。

為了讓rundll32.exe加載並使用該程序, MyEntryPoint()應具有C調用約定。 另外,我們需要一個QApplication實例來做任何GUI的東西,而rundll32.exe顯然不會為我們創建它。

要使用Qt Creator創建Qt庫,我們可以選擇File-> New File或Project-> Libraries-> C ++ Library ,項目名稱應該是MyQtBasedDll

MyEntryPoint()函數的代碼非常簡單:

extern "C"
{
__declspec(dllexport) void MyEntryPoint()
{
    if (!QApplication::instance()) {
        QApplication a(__argc, __argv);
        QMessageBox::aboutQt(0);
    } else {
        QMessageBox::aboutQt(0);
    }
}
}

此函數可以由同一個exe多次調用,並且每次構造一個新的QApplication對象時,僅在函數的持續時間內。 請注意,我們檢查現有實例,以便即使在Qt應用程序調用時我們的DLL也能正常工作。

現在您需要做的就是替換QMessageBox::aboutQt(0); 用你的功能做有用的東西!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM