2017-02-09 76 views
0

我如何可以訪問聲明,並在其他功能的主窗口的構造函數初始化的數據?有沒有一種方法可以在ui-> customPlot中幫助我?如何根據用戶輸入動態更改任何項目的位置?

我有下面的代碼在我的Qt MainWindow的構造函數:

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

我希望用戶能夠輸入數字,爲2×QTableWidget的,改變其中的箭頭指向。例如:如果用戶在表中輸入2,1,則箭頭移動並從0,0指向2,1。

這是據我已經得到:(表1是我QTableWidget的名稱)

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? 
} 


我試圖把QCPItemLine * VEC 1中mainwindow.h但couldn」弄清楚如何解決「沒有適當的默認構造函數可用」錯誤,看到QCPItemLine構造函數依賴於僅在ui-> setupUI(this)之後可用的數據,該數據在缺省構造函數列表之後調用。我也嘗試在on_table1_cellChanged函數中調用QCPItemLine * vec1 = ui-> customPlot-> item(),但得到這個錯誤:「無法從'QCPAbstractItem *'轉換爲'QCPItemLine *'」。另外我知道這種方式是有風險的,因爲我不能總是依靠vec1作爲添加到我的customPlot中的最新項目。

回答

1

你可以做VEC 1類的(私有)成員,初始化爲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); 
     } 

m_vec也可以在您的小區變換插槽

+0

如果我說'訪問私人QCPItemLine * VEC 1 = NULL; '在mainWindow.h中,將解決「沒有適當的默認構造函數可用」? –

+0

你不能在你的類定義中初始化你的(非靜態)成員。你聲明它,在初始化列表中初始化它,並在setupUI被調用後實例化你的對象。 – JSilver

+0

太棒了,有道理。謝謝。 –

相關問題