Qt 中定义的槽出现问题 求改正
#include"widget.h"Widget::Widget(QWidget*parent):QWidget(parent){slider=newQSlider(Qt...
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
slider=new QSlider(Qt::Horizontal);
spin=new QSpinBox;
spin->setRange(100,200);
slider->setRange(200,300);
connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),spin,SLOT(setV(int)));
box=new QVBoxLayout;
box->addWidget(o);
box->addWidget(slider);
box->addWidget(spin);
setLayout(box);
setWindowTitle("hello");
}
void Widget::setV(int a)
{
spin->setValue(a-100);
emit vvvChanged(a);
}
Widget::~Widget()
{
}
一个slider 和spinbox 但是数值范围不一样 想程集合关系变化 a=b+100; 怎么定义信号和槽才能实现 我那个setV是槽函数 哪里错了 求改正 并且附上一份正确的信号和槽函数 展开
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
slider=new QSlider(Qt::Horizontal);
spin=new QSpinBox;
spin->setRange(100,200);
slider->setRange(200,300);
connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),spin,SLOT(setV(int)));
box=new QVBoxLayout;
box->addWidget(o);
box->addWidget(slider);
box->addWidget(spin);
setLayout(box);
setWindowTitle("hello");
}
void Widget::setV(int a)
{
spin->setValue(a-100);
emit vvvChanged(a);
}
Widget::~Widget()
{
}
一个slider 和spinbox 但是数值范围不一样 想程集合关系变化 a=b+100; 怎么定义信号和槽才能实现 我那个setV是槽函数 哪里错了 求改正 并且附上一份正确的信号和槽函数 展开
2个回答
展开全部
第一步:
connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setSliderValue(int)));
connect(slider,SIGNAL(valueChanged(int)),spin,SLOT(setSpinValue(int)));
第二步: (自己补充槽声明)
void Widget::setSliderValue(int nSpinValue)
{
if (slider->value() != (nSpinValue+100))
slider->setValue(nSpinValue+100);
}
void Widget::setSpinValue(int nSliderValue)
{
if (spin->value() != (nSliderValue-100))
spin->setValue(nSliderValue-100);
}
connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setSliderValue(int)));
connect(slider,SIGNAL(valueChanged(int)),spin,SLOT(setSpinValue(int)));
第二步: (自己补充槽声明)
void Widget::setSliderValue(int nSpinValue)
{
if (slider->value() != (nSpinValue+100))
slider->setValue(nSpinValue+100);
}
void Widget::setSpinValue(int nSliderValue)
{
if (spin->value() != (nSliderValue-100))
spin->setValue(nSliderValue-100);
}
追问
还是不对啊...
追答
抱歉,上面写错了,
connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setSliderValue(int)));
connect(slider,SIGNAL(valueChanged(int)),spin,SLOT(setSpinValue(int)));
改成:(第三个参数改为this)
connect(spin,SIGNAL(valueChanged(int)),this,SLOT(setSliderValue(int)));
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(setSpinValue(int)));
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询