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

标签 c++ linux qt

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

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

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

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

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

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

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

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

   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)

我想在这两个函数中使用指针,只是为了处理原始变量本身而不是拷贝。 能否请您指出我做错了什么。

谢谢,

最佳答案

问题是你的信号和槽有不同的签名:信号没有参数,但槽有一个指针类型的参数。此外,即使您的信号连接可以工作,当您修改临时定义的变量 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())); 

关于c++ - 无法添加插槽并将其连接到按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298585/

相关文章:

c++ - 找不到 opencv_world341d.dll 错误

c++ - 如何在其他核心上运行每个线程?

linux - Unix : hyphen(-) getting replaced by <96>

c++ - 在 QT 中使用 QWidgets 和 QGroupBox 时不需要的填充

qt - Ubuntu 的原生 gui 工具包,过去、现在和 future

c++ - 将结构体转换为整数合法吗?

c++ - C++ 中的 For Loop 变量递增位置的区别

没有 fork 可以用 pipe 吗?

linux - 如何通过 HDFS 的名称获取最大目录?

android - 用于 Android 应用程序开发的 QT Lite