2017-02-09 4 views
0

Как я могу получить доступ к данным, которые объявлены и инициализированы в конструкторе 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.

Это, насколько я получил: (. Table1 это имя моего 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 * vec1 в mainwindow.h, но не мог» t выяснить, как разрешить ошибку «Нет подходящего конструктора по умолчанию», поскольку конструктор QCPItemLine полагается на данные, которые доступны только после ui-> setupUI (this), который вызывается после списка конструкторов по умолчанию.

Я также попытался вызвать QCPItemLine * vec1 = ui-> customPlot-> item() в функции on_table1_cellChanged, но получил эту ошибку: «невозможно преобразовать из« QCPAbstractItem * »в« QCPItemLine * ». Плюс я знаю, что это рискованно, потому что я не всегда могу полагаться на vec1, являющийся последним элементом, добавленным в мой customPlot.

ответ

1

Вы можете сделать vec1 членом (private) класса, инициализировать его как 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 * vec1 = NULL; 'in mainWindow.h, не будет ли разрешено« подходящий конструктор по умолчанию »? –

+0

Вы не можете инициализировать свой (не статический) член в определении вашего класса. Вы объявляете это, инициализируете его в списке инициализации и создаете экземпляр вашего объекта после вызова setupUI. – JSilver

+0

Отлично, имеет смысл. Благодарю. –

Смежные вопросы