C++ 如何更改任何项目';根据用户输入动态调整位置?

C++ 如何更改任何项目';根据用户输入动态调整位置?,c++,qt,data-structures,window,qcustomplot,C++,Qt,Data Structures,Window,Qcustomplot,如何访问在其他函数的主窗口构造函数中声明和初始化的数据?在ui->customPlot上有什么方法可以帮我解决这个问题吗? 我的Qt MainWindow构造函数中有以下代码: QCPItemLine* vec1 = new QCPItemLine(ui->mainGraph); vec1->start->setCoords(0, 0); vec1->end->setCoords(4, 4); 我希望用户能够在2x1 QTableWidget中输入数字,并更改箭头

如何访问在其他函数的主窗口构造函数中声明和初始化的数据?在ui->customPlot上有什么方法可以帮我解决这个问题吗?

我的Qt MainWindow构造函数中有以下代码:

QCPItemLine* vec1 = new QCPItemLine(ui->mainGraph);
vec1->start->setCoords(0, 0);
vec1->end->setCoords(4, 4);
我希望用户能够在2x1 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?
}
(表1是我的QTableWidget的名称。)


我尝试将QCPItemLine*vec1放入mainwindow.h中,但无法解决“没有合适的默认构造函数可用”错误,因为QCPItemLine构造函数依赖于仅在ui->setupUI(this)之后可用的数据,这是在默认构造函数列表之后调用的

我还尝试在on_table1_cellChanged函数中调用QCPItemLine*vec1=ui->customPlot->item(),但出现了以下错误:“无法从'QCPAbstractItem*'转换为'QCPItemLine*”。另外,我知道这样做是有风险的,因为我不能总是依赖于vec1是添加到customPlot中的最新项。

您可以将vec1设置为类的(私有)成员,将其初始化为nullptr,并在调用setupUI后进行设置

主窗口

private: 
      QCPItemLine* m_vec1;
mainWindow.cpp

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

如果我说
private QCPItemLine*vec1=NULL,也可以在您的单元格更改槽中访问m_vec