Как добавить всплывающую подсказку в QSlider при движении мыши
Я хочу, чтобы всплывающая подсказка для QSlider показывала текущее значение ползунка при перемещении мыши в QT C++
1 ответ
Игнорирование отсутствия MCVE OP…
…вот так:
// 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();
}
Вывод:
Существенная часть этого 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
});
В
QSlider::sliderMoved()
signal подключается к слоту (представленному как лямбда), который устанавливает текущее значение как всплывающую подсказку.
Для этого
QSlider::setToolTip()
функция (унаследованная от
QWidget
) может быть использован. При использовании я обнаружил досадную задержку (которую я помню из своих собственных проектов, как ее можно исправить).
С помощью
QToolTip::showText()
вместо этого обеспечивает лучший внешний вид.
Обратите внимание, что я предпочел
QSlider::sliderMoved()
над
QSlider::valueChanged()
. Последний вызывается для любого изменения ползунка (даже если он не является результатом взаимодействия с пользователем), в то время как первый специально вызывается
когда sliderDown имеет значение true и ползунок перемещается. Обычно это происходит, когда пользователь перетаскивает ползунок.
Дальнейшее чтение: