有没有办法在绘图区域上获得鼠标坐标QChartView?优选地,在轴单元中.目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘制的对象.
我找不到任何内置函数QChartView,所以我试图QChartView::mouseMoveEvent(QMouseEvent *event)用来尝试计算绘图区域中的结果位置.问题是我无法获得绘图区域坐标系的任何参考.我已经尝试过使用了mapToScene,mapToItem而且mapToParent反过来mapFrom...我可以抓住所有对象试图做到这一点,但无济于事.
我发现这QChartView::chart->childItems()[2]确实是绘图区域,不包括轴和轴标签.然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)十字形仅出现在绘图区域而不是相邻对象上.但是,我尝试的任何东西似乎都没有正确引用这个对象的坐标系.
似乎我找不到一种方法来包含<QtCharts/QLineSeries>在我的标题中,所以Qt知道QLineSeries类.
Qt += charts到我的.pro文件中.#include <QtCharts/QLineSeries>了MainWindow.hRelease,通过右键单击项目并选择它并运行它来运行QMake.我收到消息:
...\PlottingCharts\mainwindow.h:14: error: 'QLineSeries' does not name a type
QLineSeries *series;
^
Run Code Online (Sandbox Code Playgroud)
很明显,Qt对QLineSeries一无所知.
作为参考,这些linechart和openglseries示例正常工作.
谁知道我错过了什么?
我想知道如何QChart在添加新点后添加新点QLineSeries.
目标是使用它来显示以高速率(高达400 000点/秒)采集的数据,并在点到达数据包时更新绘图.
这是我一直在研究的测试程序:
主窗口:
class MainWindow : public QMainWindow{
Q_OBJECT
QLineSeries *series;
QChart *chart;
QChartView *chartView;
int cnt=0;
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pB_Start_clicked();
private:
Ui::MainWindow *ui;
};
Run Code Online (Sandbox Code Playgroud)
MainWindow构造函数:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){
ui->setupUi(this);
series = new QLineSeries();
chart = new QChart();
chart->setBackgroundRoundness(0);
chart->addSeries(series);
// A bunch of formatting
chart->setBackgroundVisible(false);
chart->setMargins(QMargins(0,0,0,0));
chart->layout()->setContentsMargins(0,0,0,0);
chart->legend()->hide();
chart->setPlotAreaBackgroundBrush(QBrush(Qt::black));
chart->setPlotAreaBackgroundVisible(true);
chartView = new QChartView(chart);
ui->gridLayout->addWidget(chartView);
}
Run Code Online (Sandbox Code Playgroud)
还有一个pushButton clicked事件可以为系列添加点数:
void MainWindow::on_pB_Start_clicked(){
series->append(cnt,qSin(cnt/10));
cnt++; …Run Code Online (Sandbox Code Playgroud) 我正在尝试更改一个字节的4个中间位以对应另一个字节的高半字节:
假设我们从:
In = 0bABCDEFGH
Out = 0bXXXXXXXX // Some random byte
Run Code Online (Sandbox Code Playgroud)
我想要:
Out = 0bXXABCDXX
Run Code Online (Sandbox Code Playgroud)
留下任何其他位置Out的极端不变.
我怎样才能做到这一点?
注意: 'X'表示任何位,0或1,只是为了区分来自输入的内容.
我得:
(0b00111100 & (IN>>2)) = 0b00ABCD00
Run Code Online (Sandbox Code Playgroud)
,过滤高半字节并使其居中但是接着是什么?我怎么能把它移动到Out?