自定义信号和槽的问题
void Widget::vvvChanged()
{
if(a!=spin->value())
{
a=spin->value()+100;
emit setV(a);
}
}
void Widget::setV(int a)
{
if(a!=spin->value())
{
spin->setValue(a);
}
}
信号函数是不需要实现的
setV(int a);是信号函数还是槽函数?
信号函数不需要实现?可以具体解释一下吗 setV是槽函数
信号函数只要定义了就可以。
比如在你的头文件有这样的一个信号函数:
signals:
void sendData(int iValue);
然后你有一个这样的槽函数:
private slots:
void setV(int iValue);
那么你在任何地方都可以直接发送这样的信号:
emit sendData(x); //x是一个整型数
通过连接:connect(this, SIGNAL(sendData(int)), this, SLOT(setV(int)));
你的槽函数:
void XXX::setV(int iValue)
{
qDebug()<<iVlaue<<endl; //这边的iValue就是你信号那么传过来的值,即x
}#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()
{
}
我这个哪里不对吗 怎么还是不对
你要什么效果?我写一个Demo给你好了。
一个spinbox 一个slider 一个范围是100~200 一个范围是200~300 想自己写信号和槽 来实现他俩的连接
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(setsliderValue(int)));
connect(slider,SIGNAL(valueChanged(int)),spin,SLOT(setspinValue(int)));
box=new QVBoxLayout;
box->addWidget(o);
box->addWidget(slider);
box->addWidget(spin);
setLayout(box);
setWindowTitle("hello");
}
void Widget::setsliderValue(int a)
{
spin->setValue(a+100);
}
void Widget::setspinValue(int a)
{
spin->setValue(a-100);
}
Widget::~Widget()
{
}