Qt如何连接rubberBandChanged信号

2024-02-27

我尝试将 QChartView 类中的 ruby​​BandChanged 信号链接到 MainWindow 类中的特定函数。

主窗口.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void rubberZoomAdapt(QRect, QPointF, QPointF);

private:
    Ui::MainWindow *ui;
    QChartView* qcvChart;
    Chart* chart;
};

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    qcvChart(new QChartView),
    chart(new Chart)
{
    ui->setupUi(this);

    //Connexion
    QObject::connect(qobject_cast<QGraphicsView*>(this->qcvChart),
                     &QGraphicsView::rubberBandChanged,
                     this,
                     &MainWindow::rubberZoomAdapt);

    this->qcvChart->setChart(this->chart);
    this->qcvChart->setRubberBand(QChartView::HorizontalRubberBand);
}

void MainWindow::rubberZoomAdapt(QRect r, QPointF fp, QPointF tp)
{
    static int i = 0;
    qDebug() << "(rubberZoomAdapt) RubberBand Event: " << QString::number(i++);
}

当我在图表中使用rubberBand时,我从未输入rubberZoomAdapt()。

有什么想法可以解决这个问题吗?

Thanks.


问题是虽然QChartView继承自QGraphicsView它不使用相同的QRubberBand so the rubberBandChanged信号从未发出。

解决方案是寻找QRubberBand因为它是一个孩子QChartView并通过过滤器将其过滤resizeEvent事件,然后创建我们自己的信号:

*.h

...
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    bool eventFilter(QObject *watched, QEvent *event) override;
public slots:
    void rubberZoomAdapt(QPointF fp, QPointF tp);

signals:
    void rubberBandChanged(QPointF fp, QPointF tp);

private:
    Ui::MainWindow *ui;
    QChartView* qcvChart;
    QChart* chart;
    QRubberBand *rubberBand;
};
...

*.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    qcvChart(new QChartView),
    chart(new QChart)
{
    ui->setupUi(this);

    qcvChart->setChart(chart);
    qcvChart->setRubberBand(QChartView::HorizontalRubberBand);
    rubberBand = qcvChart->findChild<QRubberBand *>();
    rubberBand->installEventFilter(this);

    connect(this, &MainWindow::rubberBandChanged,this, &MainWindow::rubberZoomAdapt);

    setCentralWidget(qcvChart);
    ...
}

...

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == rubberBand && event->type() == QEvent::Resize){
        QPointF fp = chart->mapToValue(rubberBand->geometry().topLeft());
        QPointF tp = chart->mapToValue(rubberBand->geometry().bottomRight());
        emit rubberBandChanged(fp, tp);
    }
    return QMainWindow::eventFilter(watched, event);
}

void MainWindow::rubberZoomAdapt(QPointF fp, QPointF tp)
{
    qDebug() << "(rubberZoomAdapt) RubberBand Event: "<<fp<<tp;
}

完整的示例可以在下面找到link https://github.com/eyllanesc/stackoverflow/tree/master/49538489/49538489

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt如何连接rubberBandChanged信号 的相关文章

随机推荐

  • 使用 std::for_each 改变对象可以吗?

    for each 接受 InputIterators from c standard template
  • Team Foundation 服务 签入时的强制性评论

    我正在使用 Microsoft 的新 Team Foundation Service http tfs visualstudio com http tfs visualstudio com 我想知道是否可以在办理入住时强制提出评论 例如如果
  • 如何使用用户栏进行交易?

    我得到了使用 sqlalchemy continuum 的建议 它似乎可以立即完成我想要的功能 默认情况下 ORM 假定存在一个用户列 我确实想保存编辑的发起者 但是只说 这就是指定 User 类的方式 而没有说明实际使用版本化表时如何指定
  • 将 HTML 转换为 Word 文件?

    如何将 ruby 文件转换为 word 文件 即 docx 文件 对于pdf 大家宝石大虾 但是有没有word文件的gem 我正在尝试将我的html文件转换为word文件 以便用户也可以编辑它 这种情况应该怎么办 我本来打算将该文件转换为w
  • 白线出现在特定浏览器宽度的渐变填充 div 的末尾

    我有一个带有 id 的 div gradient div with a background image set to linear gradient 我在线性渐变的末尾和 div 的末尾之间发现了间隙 gradient div仅在某些浏览
  • 如何动态访问 Django 模型字段详细名称?

    我想访问我的模型字段 verbose name 我可以通过这样的字段索引来获取它 model meta fields 2 verbose name 但我需要动态获取它 理想情况下应该是这样的 model meta fields locati
  • 使用 Spring Data 从 RDBMS 刷新 ElasticSearch 索引

    我有以下设置 Mysql RDBMS 服务器 弹性搜索服务器 我的要求是定期从 MYSQL RDBMS 复制数据并用它更新弹性服务器 目前我正在遵循以下方法 使用 Spring Data Jpa 从 MYSQL 读取所有数据的批处理作业 然
  • 如何在 Rust 中创建参数化测试?

    我想编写依赖于参数的测试用例 我的测试用例应该针对每个参数执行 我想看看每个参数是否成功或失败 我习惯用Java编写这样的东西 RunWith Parameterized class public class FibonacciTest P
  • STL容器的二进制兼容性

    假设我用 C 编写了一个 DLL 并且想要导出一个采用 std vector 参数的方法 我可以希望不同的 STL 版本之间有二进制兼容性吗 我不知道版本之间的兼容性有任何保证 甚至同一编译器上的发布和调试之间也没有保证 一种解决方案是为向
  • SQL:找出每个组每个 ID 的所有可能的年份组合

    我正在使用 Netezza SQL 我有以下关于学生 2010 2015 年 的数据集 my table 他们当前就读的学位专业 参加考试的日期以及考试结果 student id current major year exam result
  • Cakephp 导入控制器

    我是 cakephp 的新手 我想在我的控制器中导入控制器 所以我使用以下语法 这是我导入用户控制器的控制器 用户控制器 php function api work data this gt User gt find all this gt
  • 半角和全角字符的用途是什么?

    半角字符和全角字符的用途是什么 它们之间有什么区别 我很好奇是因为验证器 js https github com chriso validator js 一个开源字符串验证库 有几个函数可以评估form http en wikipedia
  • Pandas 用组值填充 NA [重复]

    这个问题在这里已经有答案了 给定以下数据框 import pandas as pd import numpy as np df pd DataFrame Site A A A B B B C C C Value np nan 1 np na
  • Magento 2 Rest Api 在产品更新时过于频繁地清除缓存

    我们对 Magento 2 的 Api 存在一个问题 涉及全页缓存以及来自 ERP 系统的其余 API 的更新 ERP 不断通过 API 推送库存 库存和产品更新 进而刷新每次产品更新的缓存 从而形成始终不缓存的网站 我们尝试包装 Flus
  • 以编程方式下载视频android的第一帧

    我想从我的 Android 应用程序的服务器下载视频文件的单帧 我不想下载前面的完整视频 使用该帧作为缩略图向用户显示 以便用户选择后可以下载 ffmpeg可以使用以下命令从视频流创建缩略图 ffmpeg itsoffset 4 i htt
  • MPI中如何获取物理机的数量

    我可以用MPI Comm size获取处理器总数 但是如何获取真实物理机的数量呢 If by 物理机你的意思是一组处理元素 共享公共内存地址空间 然后是 MPI 3 按类型分割操作MPI COMM SPLIT TYPE可用于便携式获取此类机
  • PHP和2多维数组基于两个键值进行比较

    我有两个像这样的多维数组 original Array 0 gt Array time gt 1364690340 memberid gt 90 type gt single 1 gt Array time gt 1364690341 me
  • 在不使用 CAP_FIRST 的情况下将列中多个单词的首字母大写

    我有一张如下表 Name firstname lastname FirstName Lastname firstName Lastname FirstName lastname 我正在尝试将每个字母大写firstname and lastn
  • 如何使用 Zend DB 执行 MySQL IN 子句?

    我正在尝试使用 Zend Framework 1 11 获取整数数组中的行 this gt dbSelect gt from table prefix product link gt joinLeft table prefix produc
  • Qt如何连接rubberBandChanged信号

    我尝试将 QChartView 类中的 ruby BandChanged 信号链接到 MainWindow 类中的特定函数 主窗口 h class MainWindow public QMainWindow Q OBJECT public