如何根据用户输入动态更改任何项目的位置?

时间:2017-02-09 04:31:50

标签: c++ qt data-structures window qcustomplot

如何在其他函数中访问MainWindow构造函数中声明和初始化的数据?在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?
}

(table1是我的QTableWidget的名称。)

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

我还尝试在on_table1_cellChanged函数中调用QCPItemLine * vec1 = ui-> customPlot-> item(),但得到此错误:“无法从'QCPAbstractItem *'转换为'QCPItemLine *'”。另外我知道这种方式存在风险,因为我不能总是依赖vec1作为添加到我的customPlot中的最新项目。

1 个答案:

答案 0 :(得分: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);
        }

m_vec也可以在你的cell-changed-slot

中访问