我从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);
顺便说一下,你不是在增加整数的值,而是在增加指针的值。
这是一个等待发生的错误