无法添加插槽并将其连接到按钮

时间:2015-05-18 08:41:02

标签: c++ linux qt

我从Qt框架的示例中收集了一个名为calendar的应用程序代码。我试图从中学习并添加一些功能。我现在遇到的问题是,我想对我创建的两个按钮实现两个功能(一个用于增加日期计数,第二个用于减少)。

我添加到函数中以增加日期的代码是:

void MainWindow::forward(int *click_forward)
{
    click_forward++;
}

并将代码添加到函数中以减少日期:

void MainWindow::backwards(int *click_backwards)
{
    click_backwards--; 
}

在构造函数中我定义了一个名为click的变量int    类型,我通过引用将此变量发送到两个函数:

   forward(&click);
   backward(&click);   

在头文件中,在公共限制区域中,这两个功能都是
  定义为:

   void forward(int *click_forward);

   void backwards(int *click_backwards);

我还实现了两个SIGNAL-SLOT连接:

   QObject::connect(nextbtn, SIGNAL(clicked()), this, SLOT(forward(int  
   &click)));

   QObject::connect(beforebtn, SIGNAL(clicked()), this, 
   SLOT(backwards(int &clickt))); 

但由于某些原因,当我编译项目时,我收到的信息是:

   QObject::connect: No such slot MainWindow::forward(int &click) 

   QObject::connect: No such slot MainWindow::backwards(int &clickt)

我想在这两个函数中使用指针,只是为了处理原始变量本身而不是副本。 我可以请你指出我做错了什么。

谢谢,

3 个答案:

答案 0 :(得分:4)

问题是你的信号和插槽有不同的签名:signal没有参数,但slot有一个指针类型的参数。此外,即使您的信号连接起作用,在修改临时定义的变量click_backwards等时,执行此类代码也不会做任何有用的事情(至少)。

我会通过以下方式解决这个问题:

定义类成员变量和槽:

class MainWindow
{
    [..]
private slots:
    void forward();
    void backwards();

private:
    int click_forward;
    int click_backwards;
}

定义广告位:

void MainWindow::forward()
{
    click_forward++;
}

void MainWindow::backwards()
{
    click_backwards--; 
}

最后建立联系:

QObject::connect(nextbtn, SIGNAL(clicked()), this, SLOT(forward()));
QObject::connect(beforebtn, SIGNAL(clicked()), this, SLOT(backwards())); 

答案 1 :(得分:1)

如果您使用这样的信号和插槽,那么您会收到编译器错误而不是运行时错误,我个人觉得非常有帮助,因为它会告诉您由于信号/插槽不兼容而无法连接

QObject::connect(nextbtn, &QPushButton::clicked, this, &MainWindow::forward);

答案 2 :(得分:1)

顺便说一下,你没有增加整数的值,你正在增加指针。

这是一个等待发生的错误。