开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (6)
标签 (19)
master
hex_slider
dev
weblate
bt_server
PlotWidget
V0.3.5
V0.3.4
V0.3.3
V0.3.2
V0.3.1
V0.3
V0.2.4
V0.2.3
V0.2.2
V0.2.1
V0.2
V0.1.6
V0.1.5
V0.1.4
V0.1.3
V0.1.2
V0.1.1
V0.1
V0.0.1
master
分支 (6)
标签 (19)
master
hex_slider
dev
weblate
bt_server
PlotWidget
V0.3.5
V0.3.4
V0.3.3
V0.3.2
V0.3.1
V0.3
V0.2.4
V0.2.3
V0.2.2
V0.2.1
V0.2
V0.1.6
V0.1.5
V0.1.4
V0.1.3
V0.1.2
V0.1.1
V0.1
V0.0.1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (6)
标签 (19)
master
hex_slider
dev
weblate
bt_server
PlotWidget
V0.3.5
V0.3.4
V0.3.3
V0.3.2
V0.3.1
V0.3
V0.2.4
V0.2.3
V0.2.2
V0.2.1
V0.2
V0.1.6
V0.1.5
V0.1.4
V0.1.3
V0.1.2
V0.1.1
V0.1
V0.0.1
SerialTest
/
src
/
mycustomplot.cpp
SerialTest
/
src
/
mycustomplot.cpp
mycustomplot.cpp 6.85 KB
一键复制 编辑 原始数据 按行查看 历史
wh201906 提交于 2023年05月21日 16:12 +08:00 . Change theme without restarting app pt.2
#include "mycustomplot.h"
#include <QGesture>
#include <QGestureEvent>
#include <QGestureRecognizer>
MyCustomPlot::MyCustomPlot(QWidget* parent) : QCustomPlot(parent)
{
grabGesture(Qt::PinchGesture);
installEventFilter(this);
}
bool MyCustomPlot::event(QEvent *event)
{
if(event->type() == QEvent::Gesture)
{
QGestureEvent* gEvent = static_cast<QGestureEvent*>(event);
QGesture* gesture = gEvent->gesture(Qt::PinchGesture);
if(!gesture)
return QCustomPlot::event(event);
if(!interactions().testFlag(QCP::iRangeZoom))
return QCustomPlot::event(event);
QPinchGesture* pinchGesture = static_cast<QPinchGesture *>(gesture);
if(!handlePinchGesture(pinchGesture))
return QCustomPlot::event(event);
event->accept();
return true;
}
return QCustomPlot::event(event);
}
bool MyCustomPlot::eventFilter(QObject *watched, QEvent *event)
{
// eventFilter doesn't work on the mouseEvent of layerables
// so this eventFilter should be installed on the QCustomPlot object,
// and treat "mMouseEventLayerable" as "watched"
if(event->type() == QEvent::MouseMove)
{
QCPAxis* axis = qobject_cast<QCPAxis*>(mMouseEventLayerable);
if(axis)
{
// if iRangeDrag is not set, return true(filter it out)
return !interactions().testFlag(QCP::iRangeDrag);
}
}
return QCustomPlot::eventFilter(watched, event);
}
bool MyCustomPlot::handlePinchGesture(QPinchGesture* pinchGesture)
{
auto state = pinchGesture->state();
// record the scale center
if(state == Qt::GestureStarted)
{
// disable the drag interaction
// The drag interaction will affect the scaleRange() there.
// The mouseMoveEvent() of QCPAxisRect will test the iRangeDrag flag.
// The mouseMoveEvent() of QCPAxis will not test the iRangeDrag flag, so I need some extra code in MyCustomPlot::eventFilter()
m_iRangeDragEnabled = interactions().testFlag(QCP::iRangeDrag);
setInteraction(QCP::iRangeDrag, false);
QPointF pinchCenter = mapFromGlobal(pinchGesture->centerPoint().toPoint());
foreach(QCPLayerable* candidate, layerableListAt(pinchCenter, false))
{
QCPAxis* axis = qobject_cast<QCPAxis*>(candidate);
QCPAxisRect* rect = qobject_cast<QCPAxisRect*>(candidate);
// pinch on axis, detect it first
if(axis && axis->axisRect()->rangeZoom().testFlag(axis->orientation()) && axis->axisRect()->rangeZoomAxes(axis->orientation()).contains(axis))
{
qDebug() << "on axis";
m_axisScaleCenterList.insert(axis, axis->pixelToCoord(axis->orientation() == Qt::Horizontal ? pinchCenter.x() : pinchCenter.y()));
break; // necessary, since the QCPAxisRcet contains the QCPAxis
}
// pinch on rect
else if(rect)
{
qDebug() << "on rect";
QPointF pinchDirection = pinchGesture->centerPoint() - pinchGesture->hotSpot();
qreal pinchTan = (pinchDirection.x() == 0) ? 572958 : qAbs(pinchDirection.y() / pinchDirection.x());
Qt::Orientations pinchOrientations;
if(pinchTan < 2.74) // ~70 degree
pinchOrientations |= Qt::Horizontal;
if(pinchTan > 0.364) // ~20 degree
pinchOrientations |= Qt::Vertical;
Qt::Orientations rangeZoom = rect->rangeZoom();
if(rangeZoom.testFlag(Qt::Horizontal) && pinchOrientations.testFlag(Qt::Horizontal))
{
foreach(QCPAxis* it, rect->rangeZoomAxes(Qt::Horizontal))
{
m_axisScaleCenterList.insert(it, it->pixelToCoord(pinchCenter.x()));
}
}
if(rangeZoom.testFlag(Qt::Vertical) && pinchOrientations.testFlag(Qt::Vertical))
{
foreach(QCPAxis* it, rect->rangeZoomAxes(Qt::Vertical))
{
m_axisScaleCenterList.insert(it, it->pixelToCoord(pinchCenter.y()));
}
}
break;
}
}
}
// scale
else if(state == Qt::GestureUpdated)
{
for(auto it = m_axisScaleCenterList.begin(); it != m_axisScaleCenterList.end(); ++it)
{
it.key()->scaleRange(1.0 / pinchGesture->scaleFactor(), it.value());
}
replot(rpQueuedReplot);
}
else if(state == Qt::GestureFinished)
{
setInteraction(QCP::iRangeDrag, m_iRangeDragEnabled);
m_axisScaleCenterList.clear();
replot();
}
return true;
}
void MyCustomPlot::setDarkStyle(bool enabled)
{
QPen tmpPen[3];
QColor tmpColor;
QBrush tmpBrush[2];
QLinearGradient plotGradient;
QLinearGradient axisRectGradient;
if(enabled)
{
// from https://www.qcustomplot.com/index.php/demos/styleddemo
plotGradient.setStart(0, 0);
plotGradient.setFinalStop(0, 350);
plotGradient.setColorAt(0, QColor(80, 80, 80));
plotGradient.setColorAt(1, QColor(50, 50, 50));
axisRectGradient.setStart(0, 0);
axisRectGradient.setFinalStop(0, 350);
axisRectGradient.setColorAt(0, QColor(80, 80, 80));
axisRectGradient.setColorAt(1, QColor(30, 30, 30));
tmpPen[0] = QPen(Qt::white, 1);
tmpPen[1] = QPen(QColor(140, 140, 140), 1, Qt::DotLine);
tmpPen[2] = Qt::NoPen;
tmpColor = Qt::white;
tmpBrush[0] = plotGradient;
tmpBrush[1] = axisRectGradient;
}
else
{
// from qcustomplot.cpp(2.1.1)
tmpPen[0] = QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap);
tmpPen[1] = QPen(QColor(200, 200, 200), 0, Qt::DotLine);
tmpPen[2] = QPen(QColor(200, 200, 200), 0, Qt::SolidLine);
tmpColor = Qt::black;
tmpBrush[0] = QBrush(Qt::white, Qt::SolidPattern);
tmpBrush[1] = Qt::NoBrush;
}
xAxis->setBasePen(tmpPen[0]);
yAxis->setBasePen(tmpPen[0]);
xAxis->setTickPen(tmpPen[0]);
yAxis->setTickPen(tmpPen[0]);
xAxis->setSubTickPen(tmpPen[0]);
yAxis->setSubTickPen(tmpPen[0]);
xAxis->setTickLabelColor(tmpColor);
yAxis->setTickLabelColor(tmpColor);
xAxis->grid()->setPen(tmpPen[1]);
yAxis->grid()->setPen(tmpPen[1]);
// xAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::DotLine));
// yAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::DotLine));
// xAxis->grid()->setSubGridVisible(true);
// yAxis->grid()->setSubGridVisible(true);
xAxis->grid()->setZeroLinePen(tmpPen[2]);
yAxis->grid()->setZeroLinePen(tmpPen[2]);
setBackground(tmpBrush[0]);
axisRect()->setBackground(tmpBrush[1]);
xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);
yAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

暂无描述
暂无标签
GPL-3.0
使用 GPL-3.0 开源许可协议
, MIT
使用 MIT 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gpib/SerialTest.git
git@gitee.com:gpib/SerialTest.git
gpib
SerialTest
SerialTest
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /