c++ - 在 Qt 中动态创建 QSlider 与关联的 QLCDNumber

标签 c++ qt qt4

我想知道处理以下情况的最佳方法是什么?

我正在动态创建 QSlider,我希望将其链接到关联的 QLCDNumber 以进行显示。问题是我想要十分之一可用,所以我想在 QSLider 和 QLCDNumber 之间进行转换以除以 10。此时我真正保留的是 QSlider,即我刚刚创建并忘记的 QLCDNumbers。有没有一种无需保留太多信息即可进行转换和连接的简单方法?

提前致谢。

最佳答案

我会按照以下几行尝试:

// create a new signal in your parent widget
signals:
  void updateLCDNumber(double);

// and a slot which performs the conversion
private slots:
  void performConversion(int value)
  {
   double convertedValue = value * 0.1;
   emit(updateLCDNumber(convertedValue));
  }

// then set the signals/slots up like this
connect(mySlider, SIGNAL(valueChanged(int)), this, SLOT(performConversion(int)));
connect(this, SIGNAL(updateLCDNumber(double)), myLCDNumber, SLOT(display(double)));

之后您可以完全“忘记”您的 LCD 编号,即您不需要保留指针或引用。

编辑:多个 slider 的解决方案:

class MySlider : public QSlider
{
 Q_OBJECT
public:
 MySlider(QWidget *parent=0) : QSlider(parent)
 {
   connect(this, SIGNAL(valueChanged(int)), this, SLOT(performConversion(int)));
 }

signals:
  void updateLCDNumber(double);

private slots:
   void performConversion(int value)
   {
     double convertedValue = value * 0.1;
     emit(updateLCDNumber(convertedValue));
   } 
};

现在创建 MySlider 实例而不是 QSlider 实例并连接您的 QLCDNumbers:

connect(mySlider1, SIGNAL(updateLCDNumber(double)), myLCDNumber1, SLOT(display(double)));
connect(mySlider2, SIGNAL(updateLCDNumber(double)), myLCDNumber2, SLOT(display(double)));
...

这样也可以实现不同的转换因子之类的,只需要修改MySlider的实现即可。

希望对您有所帮助。

关于c++ - 在 Qt 中动态创建 QSlider 与关联的 QLCDNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246462/

相关文章:

c++ - 将 cplex 与 netbeans c++ 一起使用,链接器问题

c++ - Qt5 QFile::close() 写入速度非常慢

c++ - ShellExecuteEx & GetExitCodeProcess - 处理无效或段错误

c++ - QT4 如何使用静态字段?

c++ - 构建动态大小的 std::initializer_list,第二部分

c++ - 命名空间导致模板重载解析不理想

qt4 - 将自定义小部件添加到 QMenuBar

windows - 无法完成 QT4 中的基本任务

c++ - 从 C++ 调用 Python

c++ - 生成使用来自应用程序的符号的库