Qt:连接信号和槽
Qt: Connecting signals and slots
我有一个 MainWindow
,其中包含一个带有 QTextEdit
的自定义小部件。
我想在 MainWindow
和 QTextEdit
之间创建一个 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_
。这保证了您的插槽可以连接到信号
我有一个 MainWindow
,其中包含一个带有 QTextEdit
的自定义小部件。
我想在 MainWindow
和 QTextEdit
之间创建一个 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_
。这保证了您的插槽可以连接到信号