博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

愿逝者安息 让生者前行 深切哀悼5.12遇难同胞

愿逝者安息 让生者前行 深切哀悼5.12遇难同胞
creatory.cublog.cn


自定义信号与槽手记
自定义信号与槽手记
刚看了一篇信号与槽的文章测试一个吧
就拿两个QSlider做测试吧
自定义个窗口信号与棤,当slider1值改变发射valueChanged信号时同时发射自定义信号updateValue,再将自定义信号关联于自定义槽setValue上用于改变slider2的当前值.
#include <QWidget>
class QSlider;
class MyWidget:public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent=0);
//自定义槽用玗updateValue信号发射后作相应的改变
private slots:
void setValue(int value);
//自定义信号当slider1值发生变化时发射该信号
signals:
void updateValue(int newValue);
private:
QSlider *slider1;
QSlider *slider2;
};
#include <QHBoxLayout>
#include <QSlider>
#include <QWidget>
#include "test.h"
MyWidget::MyWidget(QWidget *parent):QWidget(parent)
{
slider1=new QSlider(Qt::Horizontal);
slider1->setRange(0,99);
slider1->setValue(0);

slider2=new QSlider(Qt::Horizontal);
slider2->setRange(0,99);
slider2->setValue(0);
//slider1值发生改变时会引发updateValue信号而该信号又与setValue槽相关联
//setValue用于改变该类中的slider2
//信号不分权限所以声明仅用signals:
connect(slider1,SIGNAL(valueChanged(int)),this,SIGNAL(updateValue(int)));
connect(this,SIGNAL(updateValue(int)),this,SLOT(setValue(int)));
QHBoxLayout *layout=new QHBoxLayout;
layout->addWidget(slider1);
layout->addWidget(slider2);
setLayout(layout);
}
void MyWidget::setValue(int value)
{
slider2->setValue(value);
}
//测试主程序
#include <QApplication>
#include "test.h"
int main(int argc,char **argv)
{
QApplication app(argc,argv);
MyWidget w;
w.show();
return app.exec();
}
小结:
由于只做了slider1到slider2的关联,所以测试时只会出现拖动slider1时slider2同时改变,而拖动slider2却不会改变slider1.

发表于: 2008-04-25 ,修改于: 2008-04-25 21:07,已浏览95次,有评论0条 推荐 投诉


网友评论

发表评论