在 Qt Creator Designer 中用自定义模板小部件替换小部件
Posted
技术标签:
【中文标题】在 Qt Creator Designer 中用自定义模板小部件替换小部件【英文标题】:Replacing widget with custom template widget in Qt Creator Designer 【发布时间】:2016-02-27 16:12:15 【问题描述】:在 Qt Creator UI Designer 中,可以将小部件替换为其子类。我创建了QComboBox
的模板子类:
template <typename T>
class MappedComboBox : public QComboBox
// ...
;
我已经成功地将QComboBox
替换为MappedComboBox<int>
。然而,用 MappedComboBox<QSerialPort::BaudRate>
替换 QComboBox
小部件会失败,因为在构建时会出现依赖错误
'QSerialPort' 未在此范围内声明。
当然,摆脱它们的一种方法是将QSerialPort
包含在mappedcombobox.h
中,但这不是一种非常优雅的方式。我能以某种方式告诉 Qt Designer 在生成 UI 时包含其他文件吗?
【问题讨论】:
尝试在 Qt Designer 中的升级对话框中选中“全局”复选框。并在标题行编辑中写入 qserialport.h。 @Radek 好主意,但似乎不起作用。 Qt moc 不支持所有耗尽问题的模板类。尝试继承您的小部件以获得确切的类型:MappedIntComboBox : public MappedComboBox< int >
;
@SaZ 嘿,我意识到 QT MOC 不支持带有信号和插槽的模板类,但在这里不是问题。一切正常,只是它不包含ui_mainwindow.h
中所需的文件,我需要做一些非常丑陋的解决方法。
【参考方案1】:
在 UI 设计器中,无法包含额外的标题。更好的解决方法是在包含生成的标头之前将其包含在设计器类的 cpp 文件中。这比包含在与该标题无关的 MappedComboBox 中要好。
在 mainwindow.cpp 中:
#include "mainwindow.h"
#include <QSerialPort>
#include "ui_mainwindow.h"
【讨论】:
以上是关于在 Qt Creator Designer 中用自定义模板小部件替换小部件的主要内容,如果未能解决你的问题,请参考以下文章
在qt creator中用ui设计器创建了一个QDialog的窗口,添加了一个QWidget部件,怎么能在Qwidget上用QPainter
qt 关于使用qt designer创建的控件和代码中添加的控件有啥区别??
是否可以在 Qt Designer 中使用来自 Qt Designer 的 .ui 文件作为自定义小部件?