【问题标题】:Qt: Connecting signals and slotsQt:连接信号和插槽
【发布时间】:2015-01-28 10:55:24
【问题描述】:

我有一个 MainWindow,其中包含一个自定义小部件,其中包含一个 QTextEdit。 我想在MainWindowQTextEdit 之间创建一个信号/插槽。

MainWindow 我有:

QObject::connect(ui->Header,
        SIGNAL(ui->Header->getTextWidget()->textChanged()),
        this, // this : MainWindow
        SLOT(headerUpdated())); // Function of MainWindow

但这不起作用。甚至可以创建这样的信号/插槽组合吗?

【问题讨论】:

  • 这是可能的。请阅读the documentation 关于信号和插槽的内容或此处有关它的其他一百个问题之一。
  • connect 的第一个参数应该是发出信号的对象,这将是 getTextWidget 包含的任何内容,而不是 Header
  • 感谢 sjdowling,帮了大忙!

标签: c++ qt signals slot


【解决方案1】:

为什么要麻烦 - 让 Qt 来做所有的事情 :) 只需像这样命名您的插槽(在主窗口中):

void on_<object name>_<signal name>(<signal parameters>);

你就完成了。更多信息在这里:http://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName 重要:“对象名称”部分表示对象名称 - 不是变量名称。如果你在 QtDesigner 中设计你的窗口,它应该被设置(在 ui.setupUi 方法中)。如果没有 - 手动设置(通过调用setObjectName

请注意插槽中的参数数量。这就是我所做的:我只是复制信号原型(来自标题或文档 - 例如:http://doc.qt.io/qt-5/qabstractitemmodel.html#dataChanged - 再次注意“::”和方法名称之间的奇怪空格[某种牢不可破的零宽度空间] - 仅在从 v5.x 文档复制时出现),并在其前面加上 on_objectName_。这保证了您的插槽可以将其连接到信号

【讨论】:

  • 我不知道还有其他方法。谢谢!
猜你喜欢
  • 2012-10-15
  • 2015-03-14
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多