2014-11-08 104 views
2

我有一个问题创建QPushButton与信号和插槽。首先,我创建一个类在哪里插槽:c + + QPushButton信号和插槽

class A : public QWidget{ 

    public slots: 
void handleButton(); 

}; 

还有就是我handleButton功能: 中的.cpp

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())); 

但是,当我启动应用程序,我得到一个错误: “没有这样的插槽” 任何人能帮助我吗?

+0

qApp是类A的一个实例吗?而且签名是错误的 – 2014-11-08 14:33:24

+0

即时通讯新的C++我不知道如何设置正确的实例。 – user3730912 2014-11-08 14:35:23

+0

如果qApp不是类A的对象,则它不具有该插槽。 – 2014-11-08 14:36:09

回答

1

你有一些错误这段代码,如果你定义了“void handlebutton()”,那么你必须实现void handlebutton(),而不是无效的handlebutton(inx x,int y)这段代码甚至不应该编译。你可以只使用相同的参数连接SIGNAL和SLOTS,所以你可以连接SIGNAL(clicked())和SLOT(handlebutton()),但不能SIGNAL(点击()和SLOT(handleButton(int, 。INT))

另一个问题是连接在运行时执行的,所以你必须编译并运行之前的Qt可以告诉你错误

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

定义和实现的槽void handlebutton()并将它连接到信号clicked(),然后定义另一个方法handleButton(int x,int y),您将调用它m里面的handleButton()。

我真的希望对你有意义。

0

您的类定义应该是这样的:

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))); 

其中ab是行和列变量。

这应该工作。尝试了解基本的C++。 :)