關於 qtpropertybrowser 擴充套件問題

2021-07-31 05:02:00 字數 1036 閱讀 7638

qtpropertybrowser  是乙個基於qt開發的屬性展示控制項,功能強大。

在windows平台,使用vc編譯工具,如果將qtpropertybrowser 此庫編譯成dll時,在程式中直接使用原始類沒有問題,但如果自定義派生類且使用到訊號槽時就會遇到乙個編譯問題,這個問題歸根結底在於有沒有使用dllimport

特性的問題。

dllexport 和 dllimport 儲存類特性是 c 和 c++ 語言的 microsoft 專用擴充套件。 可以使用它們從 dll 中匯出或向其中匯入函式、資料和物件。可匯出類的所有基類都必須是可匯出的。 否則,會生成編譯器警告。 此外,同樣是類的所有可訪問成員必須是可匯出的。 此規則只允許 dllexport類從 dllimport 類繼承,dllimport 類從 dllexport 類繼承(但不建議後一種方式)。 通常來說,對 dll 客戶端可訪問的所有內容(根據 c++ 訪問規則)都應該是可匯出介面的一部分。 這包括在內聯函式中引用的私有資料成員。

qt自己擴充套件了c++,並提供了moc編譯工具,編譯其訊號-槽機制,對所有要使用qt訊號槽機制的派生類有兩個要求: 

1、必須派生自qobject或qobject的子類

2、在派生類首端新增qt的巨集 q_object, 

原因就出在q_object中,此巨集宣告了乙個靜態資料成員:static const qmetaobject staticmetaobject; 以使用基於qt系例的庫時,必須使用 dllimport 編譯指令匯入資料。

qt 定義了qt_dll巨集,但qtpropertybrowser的巨集名稱設計就不是很好,也沒有提供了相應的說明,但檢視源**會發現乙個名為:qt_qtpropertybrowser_import 的巨集,該巨集控制了qt_qtpropertybrowser_export對應的定義。

總結:使用qtpropertybrowser的dll庫,並從庫中類派生子類時,編譯出現「

無法解析的外部符 struct qmetaobject cons

t」的鏈結錯誤時,請在程式預編譯指令中加入

「qt_qtpropertybrowser_import」。

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...