2017-02-09 66 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

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

相关问题