|
自定义信号与槽手记 刚看了一篇信号与槽的文章测试一个吧 就拿两个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.
|