Qt:连接信号和槽

Qt: Connecting signals and slots

我有一个 MainWindow,其中包含一个带有 QTextEdit 的自定义小部件。 我想在 MainWindowQTextEdit 之间创建一个 signal/slot。

MainWindow我有:

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

但这不起作用。甚至可以创建这样的 signal/slot 组合吗?

何必 - 让 Qt 做所有的魔法 :) 只需像这样命名您的插槽(在主窗口中):

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

大功告成。更多信息在这里:http://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName 重要提示:"object name" 部分表示 object 的名称 - 而不是变量名称。如果您在 QtDesigner 中设计 window,则应设置它(在 ui.setupUi 方法中)。如果不是 - 手动设置(通过调用 setObjectName

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