Qt代码:QPainter painter(this);this指针是QWidget,报错参数不完整,是什么原因?
时间: 2023-03-15 16:56:38 浏览: 189
这是因为QPainter的构造函数需要两个参数,第一个参数是指向QPaintDevice的指针,而第二个参数是可选的指向 QWidget 的指针。因为只提供了一个指向QWidget的指针,所以出现了参数不完整的错误。
相关问题
QT:将painter绘制的表盘和slider连接起来
要将`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`时,表盘上的指针会随之移动。
为什么在qt界面中不会显示Qpainter
可能是因为您没有在Qt界面中正确地使用QPainter。您需要在QWidget或QFrame的paintEvent函数中创建QPainter对象并在其中绘制内容。以下是一个简单的示例代码,可以在QWidget的paintEvent函数中使用:
```c++
void MyWidget::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 2));
painter.drawLine(0, 0, width(), height());
}
```
在上面的代码中,我们创建了一个QPainter对象,并设置了它的画笔,用于绘制一条黑色线条。注意,我们将this指针传递给了QPainter的构造函数,这意味着我们将在此QWidget中进行绘制。
如果您仍然无法在Qt界面中看到QPainter绘制的内容,请确保您已经正确地调用了QWidget的update()函数,以便触发paintEvent函数的调用。