2017-02-09 14 views
0

他の関数のMainWindowコンストラクタで宣言され、初期化されたデータには、どうすればアクセスできますか?ここで私を助けるui-> customPlotのメソッドがありますか?ユーザーの入力に基づいてアイテムの位置を動的に変更するにはどうすればよいですか?

私はQtのメイン・ウィンドウコンストラクタに次のコードを持っている:

QCPItemLine* vec1 = new QCPItemLine(ui->mainGraph); 
vec1->start->setCoords(0, 0); 
vec1->end->setCoords(4, 4); 

は、私は、ユーザーが2×1 QTableWidgetに番号を入力し、場所を矢印ポイントを変更できるようにしたいです。例:ユーザーがテーブルに2,1を入力すると、矢印が移動して0,0から2,1を指し示します。

これは、私の知る限り得ているようです。

void MainWindow::on_table1_cellChanged(int row, int column) 
{ 
    // how can I access vec1 from here, since it is declared only in the scope of the constructor? 
} 

(TABLE1が私のQTableWidgetの名前です。)


私はmainwindow.hで* VEC1をQCPItemLine入れてみましたが、「couldn QCPItemLineコンストラクターがデフォルトのコンストラクターリストの後に呼び出されるui-> setupUI(this)の後でしか使用できないデータに依存していると見なし、「適切なデフォルトコンストラクターを使用できません」というエラーを解決する方法を見つけ出す。

また、on_table1_cellChanged関数でQCPItemLine * vec1 = ui-> customPlot-> item()を呼び出そうとしましたが、「QCPAbstractItem *」から「QCPItemLine *」に変換できません。私はいつもvec1が私のcustomPlotに追加された最新のアイテムであるとは限りませんので、その方法は危険だと私は知っています。

答えて

1

vec1をクラスの(プライベート)メンバーにして、nullptrとして初期化し、setupUIが呼び出された後に設定することができます。

mainWindow.h

private: 
     QCPItemLine* m_vec1; 

mainWindow.cpp

MainWindow::Mainwindow(QWidget* parent): 
    QMainWindow(parent), 
     m_vec1(nullptr) 
     { 
      ui->setupUi(this); 
      m_vec1 = new QCPItemLine(ui->mainGraph); 
     } 

私は `民間QCPItemLine * VEC1 = NULL言うならm_vecはまたあなたの細胞に変化スロット

+0

にアクセスすることができます。 'mainWindow.hでは、それは"適切なデフォルトコンストラクタが利用できません "を解決しますか? –

+0

クラス定義内の(静的でない)メンバーを初期化することはできません。それを宣言し、initialization-listで初期化し、setupUIが呼び出された後にオブジェクトをインスタンス化します。 – JSilver

+0

偉大な、意味をなさない。ありがとう。 –

関連する問題