如何在鼠标移动时将工具提示添加到 QSlider

Sre*_*a N -2 c++ qt qslider qtooltip

我想让 QSlider 的工具提示显示在 QT C++ 中鼠标移动时滑块的当前值

Sch*_*eff 5

忽略缺少OP的MCVE ......

…开始了:

// Qt header:
#include <QtWidgets>

// main application
int main(int argc, char **argv)
{
  qDebug() << "Qt Version:" << QT_VERSION_STR;
  QApplication app(argc, argv);
  // setup GUI
  QSlider qSlider(Qt::Horizontal);
  qSlider.setRange(0, 100);
  qSlider.show();
  // install signal handlers
  QObject::connect(&qSlider, &QSlider::sliderMoved,
    [&](int value) {
#if 0 // not so nice -> delayed
      qSlider.setToolTip(QString("%1").arg(value));
#else // better
      QToolTip::showText(QCursor::pos(), QString("%1").arg(value), nullptr);
#endif // 0
    });
  // runtime loop
  return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

输出:

testQSliderToolTip 的快照(动画)

这个 MCVE 的基本部分是这样的:

  QObject::connect(&qSlider, &QSlider::sliderMoved,
    [&](int value) {
#if 0 // not so nice -> delayed
      qSlider.setToolTip(QString("%1").arg(value));
#else // better
      QToolTip::showText(QCursor::pos(), QString("%1").arg(value), nullptr);
#endif // 0
    });
Run Code Online (Sandbox Code Playgroud)

QSlider::sliderMoved()信号连接到一个插槽(以 lambda 形式提供),该插槽将当前值设置为工具提示。

为此,可以使用QSlider::setToolTip()函数(继承自QWidget)。使用它时,我发现了一个烦人的延迟(我从我自己的项目中记得它是如何修复的)。

QToolTip::showText()改为使用,可提供更好的外观。

请注意,我更喜欢QSlider::sliderMoved()QSlider::valueChanged()。后者被称为滑块的任何更改(即使是那些不是由用户交互引起的),而前者被专门称为

当sliderDown 为true 并且滑块移动时。这通常发生在用户拖动滑块时。


进一步阅读: