(Qt C++) Необъявленный идентификатор ui в новой функции

:)

Я работаю над проектом, и мне нужно взять значение (ui->SpawnX->value()) и поместить его в переменную int.

Когда я ставлю:

temp_int = ui->SpawnX->value();

in

void MainWindow::on_actionSave_savegame_dat_triggered()
{
    int temp_int;
}

он работает безупречно, однако у меня их будет много, поэтому я хочу поместить его в простую функцию. Итак, выше этого я сделал:

void LevelWrite()
{
int temp_int;
    temp_int = ui->SpawnX->value();
}

Но всякий раз, когда я запускаю его, я получаю сообщение об ошибке «ui»: необъявленный идентификатор

Любая помощь была бы замечательной: D

Спасибо


person mrg95    schedule 12.07.2013    source источник
comment
Может ли ui быть членом данных MainWindow?   -  person juanchopanza    schedule 12.07.2013


Ответы (4)


Вы должны иметь это

private: void LevelWrite();

в вашем файле .h. Скорее всего, вам просто нужно будет добавить строку void LevelWrite() под уже существующим разделом private: вашего файла .h. И тогда в вашем файле .cpp вам нужно будет иметь

void MainWindow::LevelWrite()

Затем вы сможете использовать ui-> в своем методе LevelWrite. Надеюсь, это также может помочь кому-то еще, кто сталкивается с той же проблемой.

person Alexander Turner    schedule 09.11.2018

Я предполагаю, что ваше MainWindow является типизированным, унаследованным от QObject, верно? Таким образом, ui - это данные, к которым вы можете получить доступ только в своем классе, поэтому вы не можете получить к ним доступ из своей функции LevelWriter, вы можете сделать аксессор, например

void LevelWrite(MainWindow* window)
{
    int temp_int;
    temp_int = window->getUi()->SpawnX->value();
}

Или поместите LevelWriter в свой класс MainWindow.

person Hulor    schedule 12.07.2013
comment
Я получаю, что getUi не является членом MainWindow, и многое другое после этого. Я изменил его на ui Ui со скобками и без них. Ничего не получилось - person mrg95; 12.07.2013
comment
Это потому, что вы должны создать этот метод. Извините, я не совсем ясно выразился. Вы должны реализовать это. - person Hulor; 14.07.2013

Вам нужно сделать LevelWrite членом класса MainWindow, потому что ui является не глобальной переменной, а членом класса MainWindow.

person Pavel Strakhov    schedule 12.07.2013
comment
Я просто немного угадал и добавил LevelWrite в приватный раздел рядом с остальными, а затем добавил MainWindow:: в LevelWrite Итак, моя функция была MainWindow::LevelWrite() - person mrg95; 12.07.2013

Иногда может случиться так, что вы используете версию 5.x и выше и не добавили

QT += Виджеты

в верхней части вашего файла .pro. Проверьте и это.

person Wybe Turing    schedule 14.07.2020