Qt自带控件有时候不满足个性化的需求,需要自定义控件。如果自定义控件比较通用,最好在QT Designer下显示,以方便使用。最后介绍在Qt Creator中测试验证自定义控件。
Qt Creator编写自定义控件
在Qt Creator编写自定义控件可使用 “Qt4 设计师自定义控件” 模板工程,具体可参考:
需要注意的是:
- 自定义控件的编译器应选择与编译生成Qt Creater应用的编译器相同。例如:在Windows平台,一般使用MSVC 32位编译器。当然可以不一定完全相同,例如MSVC 2015 32位编译器和MSVC 2017 32位编译器编译的自定义控件DLL可以通用。
- 自定义控件类的声明中不需要使用 QDESIGNER_WIDGET_EXPORT 导出宏,否则后面使用自定义控件时将报错。
Qt Designer显示自定义控件
自定义控件编译链接后的Release目录中,将产生自定义控件的dll,将该dll拷贝至Qt Creator的插件目录,例如:
- D:\Qt\Qt5.12.0\Tools\QtCreator\bin\plugins\designer
之后重启Qt Creator,创建Qt Widgets Application,打开Qt Designer,在其自定义窗口部件中即可发现自定义控件的图标。此外还需将自定义控件的头文件放到编译器的include目录,以msvc为例:
- D:\Qt\Qt5.12.0\5.12.0\msvc2017\include\MyLabel\mylabel.h
Qt Creator测试自定义控件
打开Qt Creator,创建Qt Widgets Application 应用,打开Qt Designer,使用自定义控件,然后编译链接,将报如下错误:
1 | mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __thiscall MyLabel::MyLabel(class QWidget *)" (??0MyLabel@@QAE@PAVQWidget@@@Z),该符号在函数 "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z) 中被引用 |
其原因是没有将自定义控件包含到测试自定义控件的工程中。
- 拷贝mylabel.h、mylabel.cpp、mylabel.pri到新建工程目录下,在新建工程pro文件中添加include(mylabel.pri)
- 右键工程清除、执行qmake、重新构建应该就解决该编译链接错误了
参考链接
- Qt创建Qt Designer自定义控件及使用,by BrokenRainK.
- Qt Designer 插件测试报错问题,by 翻滚的雪球.
- QCalendarWidget - How to Highlight Dates,by stackoverflow.