QSlider 拖动滑动条使用valueChanged(int value)信号重复调用槽函数问题解决



使用三个槽,防止滑动的时候重复调用,只有滑动停止才会去改变这个值



//mydialog.h  
#ifndef MYDIALOG_H  
#define MYDIALOG_H  
#include <QDialog>  
class QLineEdit;  
class QSlider;  
class MyDialog : public QDialog  
{  
  Q_OBJECT  
public:  
  explicit MyDialog(QWidget *parent = 0);  
signals:  
public slots:  
  void setLineEditValue(int value);  
private:  
  QLineEdit *lineEdit;  
  QSlider *slider;  
};  
#endif // MYDIALOG_H  



//mydialog.cpp  
#include "mydialog.h"  
#include <QtGui/QLineEdit>  
#include <QtGui/QSlider>  
#include <QtGui/QHBoxLayout>  
MyDialog::MyDialog(QWidget *parent) :  
  QDialog(parent)  
{  
  lineEdit = new QLineEdit("50");  
  
  //新建一个水平方向的滑动条QSlider控件  
  slider = new QSlider(Qt::Horizontal);  
  //设置滑动条控件的最小值  
  slider->setMinimum(0);  
  //设置滑动条控件的最大值  
  slider->setMaximum(100);  
  //设置滑动条控件的值  
  slider->setValue(50);  
  
  //信号和槽 当滑动条的值发生改变时,即产生一个valueChanged(int)信号 设置QLineEdit控件的显示文本  
  connect(slider, SIGNAL(valueChanged(int)), this, SLOT(setLineEditValue(int)));  
  
  QHBoxLayout *layout = new QHBoxLayout();  
  layout->addWidget(lineEdit);  
  layout->addWidget(slider);  
  
  this->setLayout(layout);  
  this->resize(200, 50);  
  this->setWindowTitle("QSliderDemo");  
}  
  
void MyDialog::setLineEditValue(int value)  
{  
  int pos = slider->value();  
  QString str = QString("%1").arg(pos);  
  lineEdit->setText(str);  
}  




//main.cpp  
#include <QtGui/QApplication>  
#include "mydialog.h"  
int main(int argc, char *argv[])  
{  
  QApplication a(argc, argv);  
  MyDialog dialog;  
  dialog.show();  
  return a.exec();  
}  



程序运行截图:






本文转自:

http://blog.csdn.net/qiurisuixiang/article/details/6897914



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您不想使用信号机制,也可以使用回调函数来传递拖动的值。具体步骤如下: 1. 创建一个拖动,设置拖动的最小值、最大值和步长等属性。 2. 在需要使用拖动值的地方,定义一个回调函数,该回调函数用于接收拖动的值。 3. 将拖动sliderMoved() 信号与一个 lambda 函数连接起来,该 lambda 函数会在拖动的值发生变化时调用回调函数,并将拖动的值作为参数传递给该函数。 示例代码如下: ```cpp // 定义一个回调函数,用于接收拖动的值 void onSliderValueChanged(int value) { // 处理拖动的值 qDebug() << "拖动的值为:" << value; } // 在构造函数中创建拖动,并将其 sliderMoved() 信号与回调函数连接起来 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 创建拖动 QSlider *slider = new QSlider(Qt::Horizontal, this); slider->setRange(0, 100); slider->setSingleStep(1); slider->setValue(50); // 将拖动sliderMoved() 信号与一个 lambda 函数连接起来,该函数调用回调函数 onSliderValueChanged() connect(slider, &QSlider::sliderMoved, [=](int value) { onSliderValueChanged(value); }); } ``` 在上述代码中,创建了一个水平方向的拖动,并将其 sliderMoved() 信号与一个 lambda 函数连接起来。该 lambda 函数会在拖动的值发生变化时调用回调函数 onSliderValueChanged(),并将拖动的值作为参数传递给该函数。您可以在回调函数中处理拖动的值,或将其传递给其他函数进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值