读书人

自定义信号和槽的有关问题

发布时间: 2013-07-16 22:38:05 作者: rapoo

自定义信号和槽的问题

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);
}
}

有一个slider 和一个spinbox 但他们范围不相等 程线性关系 我想自己定义信号和槽 来实现他们的联系 比如他们的关系是 a=b+100;如何定义信号和槽 我这个定义哪里不对吗 初学 大神勿喷
[解决办法]
引用:
Quote: 引用:

信号函数是不需要实现的
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
}
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

信号函数是不需要实现的
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 想自己写信号和槽 来实现他俩的连接

你无视了4楼么 我觉得4楼说的很明白了。
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()
{

}

读书人网 >QT开发

热点推荐