好的,下面是一个简单的代码案例:
- 创建一个新的Qt Widgets应用程序项目。
- 在mainwindow.ui中拖放一个widget和一个QPushButton控件,并将widget命名为centerWidget。
- 右键单击mainwindow.h文件并选择“添加类”,创建一个名为CenterWidget的新类,它将作为centerWidget的子类。确保选中“基于QWidget”的类模板。
- 在CenterWidget类中添加以下内容:
#include <QPainter>
#include <QPaintEvent>
class CenterWidget : public QWidget
{
public:
explicit CenterWidget(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
private:
QColor m_color;
};
CenterWidget::CenterWidget(QWidget *parent)
: QWidget(parent)
{
// 设置背景色
m_color = Qt::white;
}
void CenterWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true); // 抗锯齿
painter.fillRect(rect(), m_color); // 填充背景色
// 绘制文本示例
QFont font("Arial", 20);
painter.setFont(font);
painter.setPen(Qt::red);
painter.drawText(rect(), Qt::AlignCenter, "Hello, World!");
}
- 在mainwindow.h中包含CenterWidget头文件,并添加以下成员变量:
#include "centerwidget.h"
class MainWindow : public QMainWindow
{
public:
explicit MainWindow(QWidget *parent = nullptr);
private:
QPushButton *m_button;
CenterWidget *m_centerWidget; // 新增成员变量
};
- 在mainwindow.cpp的构造函数中添加以下代码,将centerWidget设置为窗口的中心控件,并将按钮连接到一个槽:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_button = new QPushButton("Change Color", this);
connect(m_button, &QPushButton::clicked, this, [this](){
// 改变背景色
m_centerWidget->m_color = QColor(qrand() % 256, qrand() % 256, qrand() % 256);
m_centerWidget->update();
});
m_centerWidget = new CenterWidget(this);
setCentralWidget(m_centerWidget);
resize(400, 300);
}
- 运行程序,点击按钮,可以看到绘制在centerWidget上的文本会随机改变背景色。
希望这个简单的示例能够帮助您实现在widget上绘制图形。