是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?

Posted

技术标签:

【中文标题】是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?【英文标题】:Is it possible to connect slots of a model object to the GUI in QT4 -Designer? 【发布时间】:2010-06-14 11:53:06 【问题描述】:

所以我尝试使用 QTDesigner 和 C++ 构建模型视图窗口。

出于这个原因,我创建了一个 QOBject 派生类作为我的模型。它提供插槽和信号来访问它,例如:setFileName(QString) 或 fileNameChanged(QString)。

我开始在 QTDesigner 中使用信号拖放,发现它非常像 VA-Smalltalk-Like。过了一会儿,我想知道我是否也可以将我的模型连接到这个。那么是否有可能以某种方式将我的模型对象引入 Window/GUI 并让 QTDesigner 将模型对象的信号和插槽连接到 GUI。

本质上:为我写:

connect( model, SIGNAL(fileNameChanged(QString)), ui->labelFn, SLOT(setText(QString)))
connect( ui-textEdit2, SIGNAL(textChanged(QString)), model, SLOT(setFileName(QString)))

感谢解释

【问题讨论】:

【参考方案1】:

正如 jopa 所说,如果您想在 Designer 中执行此操作,则需要让 Designer 了解您的组件,这可能只有在您经常重用的情况下才值得。恕我直言,Designer 非常适合制作原型或创建初始 UI 设计,但不适合长期维护。尽管 Designer 非常强大,但仍有许多选项未通过界面公开。

我建议研究 Qt 的自动连接功能。它尝试纯粹通过插槽命名约定来建立连接。阅读更多here。我一直很想尝试一下,但我们才刚刚进入 Qt 4 转换项目,我还没有机会。

【讨论】:

【参考方案2】:

将新类型的对象引入 Designer 的唯一方法是通过插件,但这仅适用于小部件,通过 QDesignerCustomWidgetCollectionInterface。如果 Designer 允许像 Apple 的 Interface Builder 允许的那样连接到其他对象,那就太好了,但这是不可能的。现在,我们只能在表单的构造函数中连接这些信号。

【讨论】:

【参考方案3】:

我从不使用 Qt Creator 的信号和插槽编辑器,我总是使用 connect。将所有信号和插槽连接放在一个位置要容易得多,如果它们考虑正在使用的库(例如来自 QIODevice 的 readyRead())或 GUI(例如 indexChanged(int)),则它们是独立的。

这使代码更具可读性 + 我在使用信号和插槽编辑器时遇到了很多麻烦。

【讨论】:

以上是关于是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?的主要内容,如果未能解决你的问题,请参考以下文章

Qt4 现有插槽无法识别

C++ 和 QML:将 QML 信号连接到 C++ 插槽

Qt Connect 无法连接到插槽

Qt:如何将不同类的静态信号连接到插槽?

如何将多个 QShortcuts 连接到 Qt 中的一个插槽?并找出插槽内是哪个快捷方式发出的?

如何将信号连接到插槽