2013-08-25 79 views
2

我試圖做一些自定義插槽,但它抱怨自定義插槽不存在。Qt C++ - 自定義插槽

我已使用Google搜索,但無法找到類似情況的任何內容。沒有解決方案爲我工作。

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 

回答

3

您嘗試ui->lowerFrameBoxvalueChanged(int)信號與setMinimum插槽連接在ui->timeSlider。但是,setMinimum沒有插槽。您需要連接到InkPuppet中的插槽。

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

+1。從你的錯誤,'QObject :: connect:沒有這樣的插槽QSlider :: setMinimum(int)'...注意到被投訴的類沒有插槽是'QSlider' – mah

0

在Qt 5.1,您可以使用連接在這些方面也:

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

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

甚至可以使用C++ 11的λfeauture。

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

有趣,但目前尚不清楚你正在處理問題。 – sje397