没有这样的插槽QProgressBar :: setValue(const int)

时间:2013-09-16 13:30:37

标签: c++ qt

我的代码中有这一行:

    QObject::connect(scanning_worker, SIGNAL(update_progress_bar(const int)), ui.progress_bar, SLOT(setValue(const int)));

并且在运行时我收到此错误:

    No such slot QProgressBar::setValue(const int)

任何想法为什么? 在文档中,QT 4.8(我使用的)是setValuepublic slot ...

我试过这个:我在参数const之前删除了int,但没有更改。我试图用调试器调用其他插槽,并在此插槽中找到断点,所以没关系。我还尝试将'50'设置为setValue的参数

    QObject::connect(scanning_worker, SIGNAL(update_progress_bar(const int)), ui.progress_bar, SLOT(setValue(50)));

但仍然是同样的错误...

我的课程:

    class Scanning_worker : public QObject{
        Q_OBJECT
    private:
        int shots_count;
    public:
        Scanning_worker(const int shots) : shots_count(shots){}
        ~Scanning_worker(){}
    public slots:
        void do_work();
    signals:
        void error(const int err_num);
        void update_progress_bar(int value);
        void finished();
    };

ui.progress_bar处于形式(主窗口的孩子)......

我在visual studio 2010,W7 prof和QT 4.8中工作

1 个答案:

答案 0 :(得分:6)

广告位想要一个int:你给它一个const int,因此错误。将SLOT(setValue(const int))更改为SLOT(setValue(int))是不够的。你需要改变你的信号,所以它有一个int参数,而不是`const int'太:

QObject::connect(scanning_worker, SIGNAL(update_progress_bar(int)), ui.progress_bar, SLOT(setValue(int)));

基本上,您的信号应始终与您的插槽具有完全相同的参数,否则它将无效。还有另一种方法可以将信号连接到插槽,如果你做错了会给你编译时错误。我们假设您有一个这样的课程:

class Foo : public QObject {
    Q_OBJECT
public slots:
    void fooSlot(){ }
signals:
    void fooSignal(){ }
};
Foo *a = new Foo();

如果您使用qt5,则不要像这样连接:

connect( a, SIGNAL(fooSignal()), a, SLOT(fooSlot()) );

你也可以像这样连接:

connect(  a, &Foo::fooSignal, a, &Foo::fooSlot );

在这种情况下,如果出错,它将在编译期间显示。它的括号也较少,因此更容易阅读:P