我的代码中有这一行:
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(我使用的)中,setValue
是 public slot
...
我试过这个:我删除了参数中 int
之前的 const
,但没有任何变化。我尝试用调试器调用其他槽,发现我在这个槽中的断点,所以没问题。我还尝试将“50”设置为 setValue 的参数
QObject::connect(scanning_worker, SIGNAL(update_progress_bar(const int)), ui.progress_bar, SLOT(setValue(50)));
还是一样的错误...
我的类(class):
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 工作
最佳答案
插槽需要一个 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):
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
关于c++ - 没有这样的插槽 QProgressBar::setValue(const int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829304/