简体   繁体   中英

Qt C++ - Custom slots

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM