用qcustomplot插件,写一段有选择框功能,选择框选中的地方,数据只拉伸x轴数据,y轴数据不动,并且y轴的范围也不变,只变x轴的范围,选框中的y轴数据也不变,只改变下周数据
时间: 2023-09-09 14:06:23 浏览: 118
以下是一个使用QCustomPlot插件实现选择框功能,拉伸x轴数据的示例代码:
```cpp
// 创建选择框
QCPItemRect *selectionRect = new QCPItemRect(ui->customPlot);
selectionRect->setPen(Qt::black);
selectionRect->setBrush(QBrush(QColor(0, 0, 255, 50)));
selectionRect->setLayer("overlay");
// 监听鼠标拖动事件
bool isSelecting = false;
QPoint dragStart;
ui->customPlot->installEventFilter(this);
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->customPlot && event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
isSelecting = true;
dragStart = mouseEvent->pos();
selectionRect->start->setCoords(dragStart);
selectionRect->setVisible(true);
}
}
else if (obj == ui->customPlot && event->type() == QEvent::MouseMove)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (isSelecting)
{
QPoint dragEnd = mouseEvent->pos();
selectionRect->end->setCoords(dragEnd);
ui->customPlot->replot();
}
}
else if (obj == ui->customPlot && event->type() == QEvent::MouseButtonRelease)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::LeftButton && isSelecting)
{
isSelecting = false;
QPoint dragEnd = mouseEvent->pos();
selectionRect->end->setCoords(dragEnd);
selectionRect->setVisible(false);
// 拉伸x轴范围
double x1 = ui->customPlot->xAxis->pixelToCoord(dragStart.x());
double x2 = ui->customPlot->xAxis->pixelToCoord(dragEnd.x());
ui->customPlot->xAxis->setRange(x1, x2);
// 重新绘制图形
ui->customPlot->replot();
}
}
return QMainWindow::eventFilter(obj, event);
}
```
说明:
1. 创建一个`QCPItemRect`对象作为选择框。
2. 监听`customPlot`对象的鼠标事件,当左键按下时,开始选择,当鼠标移动时,更新选择框的位置,当左键释放时,结束选择。
3. 在选择结束时,根据选择框的位置,计算出选择区域的x轴范围,然后调用`setRange()`方法来拉伸x轴的范围。
4. 最后,重新绘制图形。
阅读全文
相关推荐


















