• 4853阅读
  • 4回复

Qt Designer 提升自定义控件,是不是类名和头文件名必须一致? [复制链接]

上一主题 下一主题
离线guoguiyang
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-22

本人在做一个软件,其中有一些及其简单的自定义类。为了源代码的可读性,我把所有简单自定义类都放在同一个头文件customwidget.h里。
customwidget.h的内容如下:
  1. /*******************************************
  2. 包含一些自定义类;如:LineEdit、TitleLabel
  3. ShowLabel
  4. LineEdit: 编辑行(可修改)
  5. TitleLabel:标题标签
  6. ShowLabel:显示标签(不能修改)
  7. ******************************************/
  8. #ifndef CUSTOMWIDGET_H
  9. #define CUSTOMWIDGET_H
  10. #include <QLineEdit>
  11. #include <QLabel>
  12. class LineEdit : public QLineEdit
  13. {
  14. Q_OBJECT
  15. public:
  16. explicit LineEdit(QWidget *parent = 0);
  17. signals:
  18. public slots:
  19. };
  20. class TitleLabel : public QLabel
  21. {
  22. Q_OBJECT
  23. public:
  24. explicit TitleLabel(QWidget *parent = 0);
  25. };
  26. class ShowLabel : public QLabel
  27. {
  28. Q_OBJECT
  29. public:
  30. explicit ShowLabel(QWidget *parent = 0);
  31. };
  32. #endif // CUSTOMWIDGET_H

文件就不贴了,连paintEvent()都没有,可见这些自定义控件有多简单。

现在在Qt Creator的Designer下编辑界面时,提升了界面中的控件(所有操作均正常,拼写也没错误),提升后结果如下:


编译时一直报错:
:ISO C++ forbids declaration of 'TitleLabel' with no type
经检查,发现Designer自动生成的ui_widget.h文件里,没有 #include 我的自定义控件类customwidget.h。

请问老鸟:
用Designer提升自定义类的时候,是不是必须类名和头文件名一致??
如果是真的话,吐槽一句:这有点太无聊了吧!
离线guoguiyang

只看该作者 1楼 发表于: 2013-01-22
中午吃完饭,找到了个折中的解决方法:

打开Designer自动生成的ui_widget.h文件,发现在文件头包含了这么一个定义:

#include "QtDesigner/QDesignerCustomWidgetCollectionInterface"

应该是自定义插件时要用的类。

将其改为customwidget.h,保存后重新编译,成功了。。。原因不明。

离线miloc

只看该作者 2楼 发表于: 2013-01-23
类名和头文件名必须一致
离线XChinux

只看该作者 3楼 发表于: 2013-01-23
不是必须的,但提升时会让你输入.h文件和.cpp文件名的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线guoguiyang

只看该作者 4楼 发表于: 2013-01-31
重装QT,问题解决了。
快速回复
限100 字节
 
上一个 下一个