Qt无法为QLabel分配价值

时间:2015-06-19 00:49:04

标签: c++ qt

我喜欢开始说我和他们来的时候一样。这是我从头开始构建的第一个c ++程序。我得到了大部分错误,但我似乎无法为QLabel分配值。我想要功能'值'按下计算按钮时调用。功能'值'然后应该做数学并返回答案,然后将答案分配给QLabel'结果'。这是我到目前为止所拥有的。

#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QString>
#include <QSpinBox>
#include <QHBoxLayout>
#include <QComboBox>
double x;

double value(QSpinBox *spinner)
{
int speed;
speed = spinner->value();
x = speed/8;

return x;
}
int main(int argc, char *argv[])
{




QApplication prog(argc, argv);


QWidget *mainWindow = new QWidget;
mainWindow->setWindowTitle("Plex Calculator");

QPushButton *calculate = new QPushButton("Calculate");
QComboBox *kbormb = new QComboBox;
QSpinBox *spinner =new QSpinBox;
QSlider *slider = new QSlider(Qt::Horizontal);
QLabel *results = new QLabel;

spinner->setRange(1,1000);
slider->setRange(1,1000);
spinner->setValue(1);

QObject::connect(spinner, SIGNAL(valueChanged(int)),slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),spinner, SLOT(setValue(int)));


kbormb->addItem("kb/s");
kbormb->addItem("mb/s");

QHBoxLayout *layout = new QHBoxLayout;

layout->addWidget(slider);
layout->addWidget(spinner);
layout->addWidget(kbormb);
layout->addWidget(calculate);
layout->addWidget(results);

QObject::connect(calculate, SIGNAL(clicked()), &prog, SLOT(results->setNum(value(*spinner));));


mainWindow->setLayout(layout);
mainWindow->show();

return prog.exec();
}

1 个答案:

答案 0 :(得分:1)

问题在于以下信号插槽连接。

QObject::connect(calculate, SIGNAL(clicked()), &prog, SLOT(results->setNum(value(*spinner));));

您正尝试将clicked()按钮的calculate信号连接到results->setNum(value(*spinner));的{​​{1}}广告位。但prog实际上并不是一个插槽。

插槽只是继承results->setNum(value(*spinner));的类中的一种方法。应在类的QObject部分下添加方法。详细了解信号和广告位here

要解决此问题,您必须为窗口小部件创建一个单独的类并添加逻辑。您可以在新创建的类中添加一个插槽,并将slots:信号连接到该类。然后你可以在插槽中进行计算。