Qt Designer 插件


 

  這兩天學習Qt案例Custom Widget Plugin Example,這是一個Qt Designer自定義控件。原則上,如果成功,它可以和Qt Designer 的其他控件一樣拖放編輯。然而,在實踐的過程中遇到了各種問題,雖然實現了編譯和使用這種插件,但還是不能和Qt designer 自帶控件那么方便。這里,我將遇到的一些坑寫下來。

  起先,大家應該都一樣,按案例默認配置編譯。編譯之后,新建一個項目,在Qt creater 設計里面期待出現一個新的控件條。然而想多了,沒有。再看文檔,編譯之后要執行make install,將dll文件放在pro文件里設置的$$[QT_INSTALL_PLUGINS]/designer文件夾下,Qt Designer才能找到。用qmake -query 命令查看QT_INSTALL_PLUGINS變量為:C:/Qt/5.11.2/msvc2015_64/plugins,找到C:/Qt/5.11.2/msvc2015_64/plugins/designer, 里面果然沒有該項目的dll。

  因此,在項目->build中做如下設置。

  執行之后,在C:/Qt/5.11.2/msvc2015_64/plugins/designer中找到該項目的dll。然而,新建一個項目,在Qt creator 的設計里面還是沒有找到對應的控件。搜索發現,Qt creator 的設計選項和Qt Designer並不是一個東西,於是直接打開Qt Designer, 在其中找到相應控件。

  為了測試該控件是否可以和其他控件一樣使用,利用vs新建一個Qt項目,將該條目拖入主窗口如下圖所示。編譯,出現三個錯誤提示:

1>c:\Users\dingchuang\documents\visual studio 2015\Projects\test_2\test_2\GeneratedFiles\ui_test_2.h(19): fatal error C1083: 無法打開包括文件: “analogclock.h”: No such file or directory
1>  main.cpp
1>c:\Users\dingchuang\documents\visual studio 2015\Projects\test_2\test_2\GeneratedFiles\ui_test_2.h(19): fatal error C1083: 無法打開包括文件: “analogclock.h”: No such file or directory
1>  test_2.cpp
1>c:\Users\dingchuang\documents\visual studio 2015\Projects\test_2\test_2\GeneratedFiles\ui_test_2.h(19): fatal error C1083: 無法打開包括文件: “analogclock.h”: No such file or directory

  其並不能像其他控件一樣使用。

  參考這篇文章:https://blog.csdn.net/lhl1124281072/article/details/80039223,將文件analogclock.h和analogclock.cpp復制到新建項目的源代碼目錄下,如下圖所示:

並添加到工程中:

然而,重新編譯出現新的錯誤:

1>GeneratedFiles\Debug\moc_analogclock.cpp(58): warning C4273: “AnalogClock::qt_static_metacall”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\generatedfiles\debug\../../analogclock.h(59): note: 參見“qt_static_metacall”的前一個定義
1>GeneratedFiles\Debug\moc_analogclock.cpp(65): warning C4273: “staticMetaObject”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\generatedfiles\debug\../../analogclock.h(59): note: 參見“public: static QMetaObject const AnalogClock::staticMetaObject”的前一個定義
1>GeneratedFiles\Debug\moc_analogclock.cpp(65): error C2491: “AnalogClock::staticMetaObject”: 不允許 dllimport 靜態數據成員 的定義
1>GeneratedFiles\Debug\moc_analogclock.cpp(72): warning C4273: “AnalogClock::metaObject”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\generatedfiles\debug\../../analogclock.h(59): note: 參見“metaObject”的前一個定義
1>GeneratedFiles\Debug\moc_analogclock.cpp(77): warning C4273: “AnalogClock::qt_metacast”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\generatedfiles\debug\../../analogclock.h(59): note: 參見“qt_metacast”的前一個定義
1>GeneratedFiles\Debug\moc_analogclock.cpp(85): warning C4273: “AnalogClock::qt_metacall”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\generatedfiles\debug\../../analogclock.h(59): note: 參見“qt_metacall”的前一個定義
1>  moc_test_6.cpp
1>  analogclock.cpp
1>analogclock.cpp(59): warning C4273: “AnalogClock::AnalogClock”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\analogclock.h(62): note: 參見“{ctor}”的前一個定義
1>analogclock.cpp(70): warning C4273: “AnalogClock::paintEvent”: dll 鏈接不一致
1>  c:\users\dingchuang\documents\visual studio 2015\projects\test_6\test_6\analogclock.h(65): note: 參見“paintEvent”的前一個定義

   查找errorc4273的原因,還是沒有弄清楚原理,有大神請指導一下。但嘗試去掉analogclock.h文件中的導出宏,將原來的

   class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget 

   變為

   class AnalogClock : public QWidget 

   編譯通過。運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM