QT:将painter绘制的表盘和slider连接起来
时间: 2024-03-22 11:40:08 浏览: 177
用QT来实现简单的画图
要将`QPainter`绘制的表盘和`QSlider`连接起来,可以使用`QAbstractSlider`类的`valueChanged()`信号。当`QSlider`的值发生变化时,会发出`valueChanged()`信号,我们可以在该信号的槽函数中重新绘制表盘。
以下是一个使用`QPainter`和`QSlider`实现表盘显示和控制的示例:
```cpp
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
private slots:
void onSliderValueChanged(int value);
private:
QSlider *m_slider;
int m_value;
};
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// 创建一个QSlider对象
m_slider = new QSlider(Qt::Horizontal, this);
m_slider->setRange(0, 100);
// 连接QSlider的valueChanged()信号到槽函数onSliderValueChanged()
connect(m_slider, &QSlider::valueChanged, this, &MyWidget::onSliderValueChanged);
// 初始化表盘的值
m_value = 0;
}
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制表盘
painter.drawEllipse(50, 50, 200, 200);
painter.drawLine(150, 150, 150 + 80 * qCos((m_value - 90) * M_PI / 180), 150 + 80 * qSin((m_value - 90) * M_PI / 180));
}
void MyWidget::onSliderValueChanged(int value)
{
m_value = value;
// 重新绘制表盘
update();
}
```
在上面的示例中,我们首先创建了一个`QSlider`对象,然后将其连接到`valueChanged()`信号的槽函数`onSliderValueChanged()`中。在`paintEvent()`函数中,我们使用`QPainter`对象绘制了一个表盘,并根据`m_value`的值绘制了一个指针。在`onSliderValueChanged()`函数中,我们将`m_value`的值设置为`QSlider`的当前值,并调用`update()`函数重新绘制表盘。
这样,当我们拖动`QSlider`时,表盘上的指针会随之移动。
阅读全文