【发布时间】:2018-01-21 05:18:22
【问题描述】:
您好,我不知道为什么会出现此错误,我看到一个可能来自宏 Q_OBJECT 的网络,但在其他类上没有出现此问题。
我对 ram 使用相同的代码,我只调用了一次,这里唯一的区别是我为四个 CPU 调用了 4 次。
这是我的 CPP
qtCPUBar::qtCPUBar(int i)
{
_i = i;
auto *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(showCPU(_i)));
timer->start(1000);
showCPU(_i);
resize(150, 60);
}
qtCPU::qtCPU()
{
CPUStats info;
info.updateInfo();
if (info.getCoreAmount() >= 4) {
auto *CPU1 = new qtCPUBar(0);
auto *CPU2 = new qtCPUBar(1);
auto *CPU3 = new qtCPUBar(3);
auto *CPU4 = new qtCPUBar(4);
auto *vbox6 = new QVBoxLayout();
vbox6->addWidget(CPU1);
vbox6->addWidget(CPU2);
vbox6->addWidget(CPU3);
vbox6->addWidget(CPU4);
this->setLayout(vbox6);
}
}
void qtCPUBar::showCPU(int i)
{
CPUStats cpu;
cpu.updateInfo();
auto tot = cpu._CPUInfo._Frequence;
auto la = (cpu.getInfo(i, CPUStats::CORE_USAGE)).back();
auto res = 100 * la / tot;
this->setValue(static_cast<int>(res));
}
这是我的HPP
#ifndef CPP_RUSH3_CPU_HPP
#define CPP_RUSH3_CPU_HPP
#include <QProgressBar>
#include <QtWidgets>
class qtCPUBar : public QProgressBar{
Q_OBJECT
public:
virtual ~qtCPUBar() = default;
qtCPUBar(int i);
private slots:
void showCPU(int i);
private:
int _i = 0;
};
struct qtCPU : public QWidget{
public:
virtual ~qtCPU() = default;
qtCPU();
};
#endif
【问题讨论】:
-
你能发布你遇到的错误吗?
-
QObject::connect: No such slot qtCPUBar::showCPU(_i) in ... 第 18 行,该行是:connect(timer, SIGNAL(timeout()), this, SLOT(showCPU (_i)));
-
不能这样传递参数。使用 lambda 并捕获
i。