我正在用 Qt c ++ 编写一个程序,我需要在单击按钮时启动一个paintEvent,我不明白该怎么做,他们在互联网上写道,所有绘图都应该在这个函数内进行,但是然后如何在按钮中调用它?有没有一个选项可以简单地在这个函数内绘制需要绘制的内容,然后当你点击按钮时,只需调用它?
PS:我尝试通过信号和槽来实现它,像这样:
标题:
//MainWindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPainter>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
public slots:
void paintEvent(QPaintEvent *event);
};
#endif // MAINWINDOW_H
和 cpp 文件本身:
//MainWindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(paintEvent(QPaintEvent*)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *event) {
QPainter painter(this); // Создаём объект отрисовщика
painter.setPen(QPen(Qt::white, 1, Qt::SolidLine, Qt::FlatCap));
painter.drawLine(150,150,150,400);
painter.drawLine(150,150,400,150);
painter.drawLine(400,150,400,400);
painter.drawLine(150,400,400,400);
}
但 Qt 输出以下内容:
QObject::connect: Incompatible sender/receiver arguments
QPushButton::clicked() --> MainWindow::paintEvent(QPaintEvent*)
请帮帮我,为什么它会在这里写一个错误,有什么方法可以解决这个问题并在按下按钮时绘制?
我用
QWidget::update()你仍然可以使用QWidget::repaint(),但人们说这不是最好的选择。这是调用代码:
这是课程本身: