I'm trying to make some custom slots but it complains that the custom slots don't exist.
I have googled but can't find anything with a similar situation. No solutions worked for me.
QObject::connect: No such slot QSlider::setMinimum(int)
inkpuppet.cpp
#include "inkpuppet.h"
#include "ui_inkpuppet.h"
#include "aboutdialog.h"
#include <QDialog>
#include <QWidget>
#include <QtCore>
#include <QtGui>
#include <QButtonGroup>
#include <QSlider>
InkPuppet::InkPuppet(QWidget *parent) :
QWidget(parent),
ui(new Ui::InkPuppet)
{
ui->setupUi(this);
connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)), ui->timeSlider, SLOT(setMinimum(int)));
connect(ui->upperFrameBox, SIGNAL(valueChanged(int)), ui->timeSlider, SLOT(setMaximum(int)));
//connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)), ui->timeSlider, SLOT(setRange(int,int)));
}
InkPuppet::~InkPuppet()
{
delete ui;
}
void InkPuppet::on_aboutButton_clicked()
{
}
void InkPuppet::setMinimum(int value)
{
ui->timeSlider->setMinimum(value);
}
void InkPuppet::setMaximum(int value)
{
ui->timeSlider->setMaximum(value);
}
inkpuppet.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtCore>
#include <QtGui>
#include "aboutdialog.h"
namespace Ui {
class InkPuppet;
}
class InkPuppet : public QWidget
{
Q_OBJECT
public:
explicit InkPuppet(QWidget *parent = 0);
~InkPuppet();
public slots:
void on_aboutButton_clicked();
void setMinimum(int value);
void setMaximum(int value);
private:
Ui::InkPuppet *ui;
AboutDialog *aDialog;
};
#endif // WIDGET_H
You try to connect your ui->lowerFrameBox
valueChanged(int)
signal with a setMinimum slot in ui->timeSlider
. However, the setMinimum there is no slot. You need to connect to the slot in InkPuppet.
connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)),
this, SLOT(setMinimum(int)));
In Qt 5.1 you can use connect in these ways too :
connect(ui->upperFrameBox,&QSlider::valueChanged,this,&InkPuppet::setMaximum);
connect(ui->upperFrameBox,&QSlider::valueChanged,&InkPuppet::setMaximum);
or even you can use c++11 lambda feauture.
connect(ui->upperFrameBox,&QSlider::textChanged,
[&](int value) {ui->timeSlider->setMaximum(value);});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.