グラフを描画するMainWindowとウィジェットの間でデータを渡したいと思います。 MainWindowでは、データを読み込み、いくつか行い、動的配列を作成します。ウィジェットとメインウィンドウの間でデータを接続して渡します
- この配列をメインウィンドウからウィジェットに渡してグラフを描画する必要があります。私は2つのファイルmainwindow.cppとdrawwidget.cpp
この間、これを行う方法を知らない私は、メインウィンドウ
に
をボタンをクリックしたときに、私は、働く機能を持つウィジェットファイルで
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <fstream>
#include <iostream>
#include <iomanip>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
wyczyscpkt(Tab_pkt);
wyczysc(Tab_we);
delete ui;
}
がmainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
private slots:
void on_saveimageButton_clicked();
//other functions
public slots:
private:
Ui::MainWindow *ui;
//my functions
public slots:
};
#endif // MAINWINDOW_H
drawwidget.cpp:
DrawWidget::DrawWidget(QWidget *parent) :
QWidget(parent)
{
}
void DrawWidget::paint(QPainter &painter, struct *myarray) //here I need pass array from mainwindow.cpp
{
//drawing function
}
void DrawWidget::savePng()
{
//save image function
}
drawwidget.h:
#ifndef DRAWWIDGET_H
#define DRAWWIDGET_H
#include <QWidget>
#include "mainwindow.h"
class DrawWidget : public QWidget
{
Q_OBJECT
public:
explicit DrawWidget(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *);
void paint(QPainter &painter);
void savePng();
};
#endif // DRAWWIDGET_H
しかし、信号をスロットに接続する方法はありますか?私は試しました: connect(MainWindow、SIGNAL(dataChanged(MyStruct *&struct))、this、SLOT(handleData(Mystruct *&struct))); でも動作しませんでした。 – kubizen
私は私の答えを改善し、あなたが通過すべき説明へのリンクを加えました。 – talamaki
ありがとうございます:Dそれはほとんど動作します。私はウィジェットにデータを送ることができますが、私の唯一の問題は、私が図面を拡大するためのパラメータを送信すると、それは更新されません。そのコード: 'void DrawWidget :: handleData(MyStruct *&Array) { p = Array [2] .x; } ' ' void DrawWidget :: paintEvent(QPaintEvent *){ QStyleOption opt; opt.init(this); QPainterペインタ(this);style() - > drawPrimitive(QStyle :: PE_Widget、&opt、&painter、this); painter.setRenderHint(QPainter :: Antialiasing); paint(painter); painter.end(); } ' ' void DrawWidget :: paint(QPainter&painter){ painter.drawLine(1 * p、5 * p、3 * p、4 * p); }私のコードが読みにくい場合は申し訳ありません – kubizen