c++QPushButton信号和插槽

c++ QPushButton signal and slot

本文关键字:插槽 信号 c++QPushButton      更新时间:2023-10-16

我在创建QPushButton并将其信号链接到我的插槽时遇到问题。首先,我创建了一个带有插槽的类:

class A : public QWidget{
  public slots:
    void handleButton();
};

.cpp 中有我的handleButton函数

void A::handleButton(int row, int col){
    m_button->setText("Example");
    // resize button
    m_button->resize(100,100);
}

然后我想连接按钮。

QObject::connect(m_button, SIGNAL(clicked()), qApp, SLOT(handleButton()));

但我在启动应用程序时遇到了一个错误:

"No such slot"

确保qApp是类A的对象(即定义插槽的位置)。

也就是说,签名是错误的:只有当签名与匹配时,信号才会链接到插槽

http://qt-project.org/doc/qt-4.8/signalsandslots.html

信号和插槽机制是类型安全的:信号的签名必须与接收插槽的签名匹配。

你的插槽没有正确的签名:

http://qt-project.org/doc/qt-4.8/qabstractbutton.html#clicked

void QAbstractButton::clicked ( bool checked = false ) [signal]

您在这段代码中有一些错误,如果您定义了"void handlebutton()",那么您必须实现void handlebbutton()NOT void handlebotton(inx,int y)这段代码甚至不应该编译。

更多:在QT中,您只能使用相同的参数连接SIGNALS和SLOT,因此您可以将SIGNAL(clicked())与SLOT(handlebutton())连接,但不能将SIGNAR(cliked()与SLOT(handlebutton(int,int))连接。

另一个问题是连接是在运行时执行的,所以在Qt向您显示错误之前,您必须编译并运行。

因此,一个可能的解决方案是:

定义并实现slot void handlebutton(),并将其连接到信号clicked(),然后定义另一个方法handlebutton(int x,int y),您将从handleBbutton()内部调用它。

我真的希望这对你有意义。

您的类定义应该看起来像:

class A : public QWidget
{
Q_OBJECT
public slots:
  void handleButton(int, int);
};

你应该像这样连接它:

QObject::connect(m_button, SIGNAL(clicked()),qApp, SLOT(handleButton(int a, int b)));

其中CCD_ 5和CCD_。

这应该行得通。试着理解基本的C++。:)