Qt C ++ - 自定义插槽

时间:2013-08-25 10:55:16

标签: c++ qt

我正在尝试制作一些自定义插槽,但它抱怨自定义插槽不存在。

我用谷歌搜索但找不到类似情况的任何东西。没有解决方案适合我。

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

2 个答案:

答案 0 :(得分:3)

您尝试将ui->lowerFrameBox valueChanged(int)信号与ui->timeSlider中的setMinimum插槽相关联。但是,setMinimum没有插槽。您需要连接到InkPuppet中的插槽。

connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)), 
 this, SLOT(setMinimum(int)));

答案 1 :(得分:0)

在Qt 5.1中,你也可以用这些方式连接:

 connect(ui->upperFrameBox,&QSlider::valueChanged,this,&InkPuppet::setMaximum);

 connect(ui->upperFrameBox,&QSlider::valueChanged,&InkPuppet::setMaximum);

甚至你可以使用c ++ 11 lambda feauture。

connect(ui->upperFrameBox,&QSlider::textChanged,
                      [&](int value) {ui->timeSlider->setMaximum(value);});