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

Unable to add slot and connect it to a button

本文关键字:连接 按钮 插槽 添加      更新时间:2023-10-16

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

我为增加天数的函数添加的代码是:

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

和添加到减少天数的函数中的代码:

void MainWindow::backwards(int *click_backwards)
{
    click_backwards--; 
}
在构造函数中,我定义了一个名为click的变量,该变量是int
中的一个。类型,并且我通过引用将这个变量发送给both函数:
   forward(&click);
   backward(&click);   

在头文件中,在public slosts区域中,这两个函数都是
定义为:

   void forward(int *click_forward);
   void backwards(int *click_backwards);

我还实现了两个信号槽连接:

   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)

我想在这两个函数中使用指针,只是在原始变量本身上工作,而不是在副本上工作。我能请你指出我做错了什么吗?

谢谢你,

问题是你的信号和插槽有不同的签名:信号没有参数,但插槽有一个指针类型的参数。此外,即使您的信号连接可以工作,执行这些代码也不会做任何有用的事情(至少),因为您修改了临时定义的变量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())); 

如果你这样做你的信号和插槽,那么你得到一个编译器错误,而不是一个运行时错误,我个人认为这是非常有用的,因为它会告诉你,他们不会连接,因为不兼容的信号/插槽

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

顺便说一下,你不是在增加整数的值,而是在增加指针的值。

这是一个等待发生的错误