Там слишком заморочено. Варианта проще нет? У меня есть файл который рисует вьюхи, а логику отделена поэтому не хотел слоты и сигналы к вьюхи привязывать.
В приведенном коде нет установки текстового значения в QLineEdit. Логично, что возвращается пустая строка. А что еще ты ожидаешь получить в таком случае?
#include <QApplication>
#include <QDebug>
#include <QLineEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLineEdit* line = new QLineEdit("Some text");
line->show();
QString s = line->text();
qDebug() << s;
return a.exec();
}
Вывод:
"Some text"
Текущая dev ветка Qt. Не знаю, почему у тебя пустая строка. Кстати, какой тип у MyWindows, это виджет или строка (кстати, если это не строка, то тогда понятно, ведь используется конструктор QLineEdit(QWidget *parent = nullptr))? Приведи полный код и почитай здесь https://www.linux.org.ru/help/markdown.md , как правильно оформлять код в сообщениях.
Ты ожидаешь вернуть значение, которое вбил пользователь? С этим кодом ты его не получишь.
Окна из программы можно открывать модально или немодально. show() – это немодальное открытие, оно откроет окно и тут же вернёт управление. Другими словами, твой вызов text() пролетит раньше, чем в окно успеют что-то ввести.
Для модального открытия вместо show() используй QDialog::exec(), он вернёт управление только после того, как окно будет закрыто.
Если же тебе нужно получать значения, пока окно открыто (иногда такое нужно, да), то тогда да, только сигналы и слоты.
У меня есть окно MyWindow. И в отдельном файле ShowView я передаю *MyWindow и добавляю динамически элементы(отдельный файл - это требование, а не моя прихоть) и, если не добавлять show(), то тогда элементы не будут видны. В чём суть: отрисовать форму и получить данные с неё через ShowView и вернуть их в MyWindowController.
Ты не там пытаешься значение получать. Получай где-то в другом месте, например по нажатию кнопки Ок или где там тебе это значение нужно. В этом месте у тебя контрол(QLineEdit) только создан и показан. А дальше программа работает в Message Loop.
Я пытался, но не совсем понял как обратиться к элементу из другого файла. У меня в MyWindowController реализованы слоты. ShowView.h - только рисует. Как можно обратиться к элементу из h файла, если они там в функции.
ShowView.h
QString ShowViewAuth(MyWindows *MyWindow)
{
QLineEdit *Login = new QLineEdit(MyWindow); //создаем поле ввода
Login->show();
QString d = Login->text()) //получаем данные с поля ввода
return d;
}
Я хотел вернуть строку с логином в контроллер и дальше работать с этими данными.
Так сделай не в функции. Вынеси в члены класса. new делай в конструкторе, delete в деструкторе, show делай там где надо показать, Hide там где надо спрятать.
Моя логика была в том, что в ShowView я отрисую и получу значение с формы, а затем эти значения верну обратно в контроллер и буду дальше проводить авторизацию.
Т.е я кликаю на «Войти», должна отрисоваться форма(а этого не происходит), я ввожу значения, нажимаю кнопку и возвращаю эти значения в контроллер, где буду производить авторизацию.
Моя логика была в том, что в ShowView я отрисую и получу значение с формы, а затем эти значения верну обратно в контроллер и буду дальше проводить авторизацию.
Т.е я кликаю на «Войти», должна отрисоваться форма(а этого не происходит), я ввожу значения, нажимаю кнопку и возвращаю эти значения в контроллер, где буду производить авторизацию.
Модальной? Я вроде не создаю новое окно, а в старом реализую отрисовку формы. Если вход, то одни элементы, а если регается чел, то удаляю предыдущие и добавляю новые.
Кстати, сделал через класс и элементы почему-то не видны пока не сделал show();
Ты так и не написал, по какому событию тебе нужно получить значение в поле ввода? У тебя форма, на ней поле ввода, пользователь и через час может ввести пароль. Как ты узнаешь когда его получать?
Для этого элементы сделать членами класса(сделано). В файле .h сделал конструктор, там делал new QLineEdit. Деструктором память освобождал. Не рисует пока не сделал ->show(); (((
У меня за это отвечает один и тот же слот. У меня клик происходит и в этом обработчике вызывается функция отрисовать, а далее я планировал, что эта отрисовать вернет мне введенные данные.
В общем у меня проблема с тем, чтобы вынести отрисовку формы(не модальной, а основной) в отдельный файл((( в отдельном файле без show элементы не видны, а с show данные получить никак. буд опять пытаться через файл это сделать.
У меня закрадывается подозрение, что ты в одном окне (виджете) меняешь содержимое. Если так, то приведи максимально полный код (и заголовочник, и цппшник). Потому что это можно сделать как правильно, когда никаких страданий нет, а можно неправильно, когда ты в закрытыми глазами разбрасываешь вокруг себя противопехотные мины, а потом идёшь в случайном направлении
У меня есть понимание, чтобы ты без опыта и только осваиваешь Qt. Если интересно, я бы мог дать тебе небольшой мастеркласс. При желании можно онлайн. Пиши, если интересно.
PS: Опытом надо делится.
Кстати, пришла в голову мысль о новом разделе, напишу в LOR, что-то вроде обучения. Кто-то, кто умеет, даёт уроки. Пойду в LOR с этой идеей.