C++Qt不用UI的方式实现在QGroupBox中绘制坐标图,包含横坐标及横坐标名称,纵坐标及纵坐标名称,并且光标能随着鼠标左右移动
时间: 2024-03-07 22:46:25 浏览: 64
好的,我理解了你的问题。你可以通过在 QGroupBox 中继承 QWidget 类,然后使用 QPainter 对象在 QWidget 上绘制坐标图。具体步骤如下:
1. 新建一个类,例如 MyWidget,继承 QWidget 类。
2. 在 MyWidget 类中重写 paintEvent(QPaintEvent *event) 函数,使用 QPainter 对象在 QWidget 上绘制坐标图。例如:
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true); // 抗锯齿
painter.setPen(QPen(Qt::black, 2)); // 设置画笔颜色和宽度
// 绘制坐标轴
painter.drawLine(50, 250, 400, 250); // x 轴
painter.drawLine(50, 250, 50, 50); // y 轴
// 绘制 x 轴标签
painter.drawText(200, 270, "横坐标");
painter.drawText(400, 250, ">");
painter.drawText(50, 250, "<");
// 绘制 y 轴标签
painter.drawText(20, 150, "纵坐标");
painter.drawText(50, 50, "^");
painter.drawText(50, 250, "v");
// 绘制光标
painter.setPen(QPen(Qt::red, 2));
painter.drawLine(m_cursor_pos, 50, m_cursor_pos, 250);
}
```
3. 在 MyWidget 类中重写 mouseMoveEvent(QMouseEvent *event) 函数,获取鼠标的位置并更新光标的位置。例如:
```cpp
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
if (event->x() >= 50 && event->x() <= 400 && event->y() >= 50 && event->y() <= 250)
{
m_cursor_pos = event->x();
update(); // 刷新界面
}
}
```
4. 将 MyWidget 对象添加到 QGroupBox 中并显示。例如:
```cpp
QGroupBox *groupBox = new QGroupBox("坐标图");
MyWidget *widget = new MyWidget;
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(widget);
groupBox->setLayout(layout);
groupBox->show();
```
通过上述步骤,你就可以在 QGroupBox 中绘制坐标图并实现光标随着鼠标移动了。
阅读全文