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

标签 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 的项目。

最佳答案

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

主窗口.h

private: 
      QCPItemLine* m_vec1;

主窗口.cpp

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

m_vec 也可以在你的 cell-changed-slot 中访问

关于c++ - 如何根据用户输入动态更改任何项目的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42128301/

相关文章:

c++ - 找出数字之间的最大差异

c++ - 是否有一种模式可以命名管理邪恶的 static_casts

qt - QML ListView 隐藏委托(delegate)项

c++ - Qt 中的 SQLite 数据库

java - 为什么 HashMap 在指定精确容量时再次调整大小()?

c++ - MySQL 连接器 C++ 未解析的外部符号

c++ - 如何从复制构造函数委托(delegate)到通用复制构造函数模板?

c++ - 两个线程可以同时读取同一个QList吗?

javascript - 将类似 JavaScript 的结构编译为静态、快速的 C++ 的最佳方法是什么?

data-structures - 有没有提供关联数组功能的 go 库?