LINUX.ORG.RU

В приведенном коде нет установки текстового значения в QLineEdit. Логично, что возвращается пустая строка. А что еще ты ожидаешь получить в таком случае?

m0rph ★★★★★
()
#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 , как правильно оформлять код в сообщениях.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Login->show();
QString d = Login->text();

Ты ожидаешь вернуть значение, которое вбил пользователь? С этим кодом ты его не получишь.

Окна из программы можно открывать модально или немодально. show() – это немодальное открытие, оно откроет окно и тут же вернёт управление. Другими словами, твой вызов text() пролетит раньше, чем в окно успеют что-то ввести.

Для модального открытия вместо show() используй QDialog::exec(), он вернёт управление только после того, как окно будет закрыто.

Если же тебе нужно получать значения, пока окно открыто (иногда такое нужно, да), то тогда да, только сигналы и слоты.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

У меня есть окно MyWindow. И в отдельном файле ShowView я передаю *MyWindow и добавляю динамически элементы(отдельный файл - это требование, а не моя прихоть) и, если не добавлять show(), то тогда элементы не будут видны. В чём суть: отрисовать форму и получить данные с неё через ShowView и вернуть их в MyWindowController.

Fruct
() автор топика
Ответ на: комментарий от hobbit

У меня немодальное окно. Просто я форму отрисовываю через другой файл(так надо). И show нужно для отображения. Тут написал подробно Qt. QLineEdit.text() не видит значение. (комментарий)

Fruct
() автор топика
Ответ на: комментарий от Fruct

Ты не там пытаешься значение получать. Получай где-то в другом месте, например по нажатию кнопки Ок или где там тебе это значение нужно. В этом месте у тебя контрол(QLineEdit) только создан и показан. А дальше программа работает в Message Loop.

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

Я пытался, но не совсем понял как обратиться к элементу из другого файла. У меня в MyWindowController реализованы слоты. ShowView.h - только рисует. Как можно обратиться к элементу из h файла, если они там в функции.

ShowView.h

QString ShowViewAuth(MyWindows *MyWindow)
{
QLineEdit *Login = new QLineEdit(MyWindow); //создаем поле ввода
    Login->show();
QString d = Login->text()) //получаем данные с поля ввода
return d;
}

Я хотел вернуть строку с логином в контроллер и дальше работать с этими данными.

Fruct
() автор топика
Ответ на: комментарий от Fruct

Ну как-то же тебе надо будет обработать событие по которому будешь получать значение. Нажатие на Ок, это тоже сигнал-слот.

Где ты хочешь это значение получать, напиши по шагам. Вот у тебя форма с окном ввода пароля, вот ты его ввёл, дальше что?

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

Есть файл MyController.cpp

void Auth::SlotAuth() { emit SignalAuth(); ShowViewAuth(this); //вызываем метод отрисовки окна }

ShowViewAuth вызывается из файла ShowView.h.

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

Т.е я кликаю на «Войти», должна отрисоваться форма(а этого не происходит), я ввожу значения, нажимаю кнопку и возвращаю эти значения в контроллер, где буду производить авторизацию.

Fruct
() автор топика
Ответ на: комментарий от Loki13

Есть файл MyController.cpp

void Auth::SlotAuth() 
{ 
emit SignalAuth();
 ShowViewAuth(this); //вызываем метод отрисовки окна 
}

ShowViewAuth вызывается из файла ShowView.h.

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

Т.е я кликаю на «Войти», должна отрисоваться форма(а этого не происходит), я ввожу значения, нажимаю кнопку и возвращаю эти значения в контроллер, где буду производить авторизацию.

Fruct
() автор топика
Ответ на: комментарий от Loki13

Модальной? Я вроде не создаю новое окно, а в старом реализую отрисовку формы. Если вход, то одни элементы, а если регается чел, то удаляю предыдущие и добавляю новые.

Кстати, сделал через класс и элементы почему-то не видны пока не сделал show();

Fruct
() автор топика
Ответ на: комментарий от Fruct

Ты так и не написал, по какому событию тебе нужно получить значение в поле ввода? У тебя форма, на ней поле ввода, пользователь и через час может ввести пароль. Как ты узнаешь когда его получать?

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

Т.е я кликаю на «Войти», должна отрисоваться форма(а этого не происходит), я ввожу значения, нажимаю кнопку и возвращаю эти значения в контроллер

Вот в обработчике вот этого «нажимаю кнопку» и нужно читать значение из поля ввода.

А по клику «Войти», делай show для формы.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Для этого элементы сделать членами класса(сделано). В файле .h сделал конструктор, там делал new QLineEdit. Деструктором память освобождал. Не рисует пока не сделал ->show(); (((

Fruct
() автор топика
Ответ на: комментарий от Loki13

У меня за это отвечает один и тот же слот. У меня клик происходит и в этом обработчике вызывается функция отрисовать, а далее я планировал, что эта отрисовать вернет мне введенные данные.

Fruct
() автор топика
Ответ на: комментарий от Loki13

В общем у меня проблема с тем, чтобы вынести отрисовку формы(не модальной, а основной) в отдельный файл((( в отдельном файле без show элементы не видны, а с show данные получить никак. буд опять пытаться через файл это сделать.

Fruct
() автор топика
Ответ на: комментарий от Fruct

Ты не понимаешь простого. У тебя нет данных, потому, что ты их ещё не ввёл на тот момент, когда пытаешься их читать.

Для проверки и понимания сделай в обработчике клика по кнопке

static bool second = false;

if(!second)
{
    show();
    second = true;
}
else
{
    text();
}

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

PS: Разные у тебя файлы или нет, это вообще не имеет значения в данном случае.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 3)
Ответ на: комментарий от Fruct

Смотря как организуешь. Я, к слову, не понимаю, почему ты их так боишься, они как раз позволяют тебе заняться событийно-ориентированной разработкой

XMs ★★★★★
()
Ответ на: комментарий от Fruct

У меня закрадывается подозрение, что ты в одном окне (виджете) меняешь содержимое. Если так, то приведи максимально полный код (и заголовочник, и цппшник). Потому что это можно сделать как правильно, когда никаких страданий нет, а можно неправильно, когда ты в закрытыми глазами разбрасываешь вокруг себя противопехотные мины, а потом идёшь в случайном направлении

XMs ★★★★★
()
Ответ на: комментарий от Fruct

У меня есть понимание, чтобы ты без опыта и только осваиваешь Qt. Если интересно, я бы мог дать тебе небольшой мастеркласс. При желании можно онлайн. Пиши, если интересно.

PS: Опытом надо делится.

Кстати, пришла в голову мысль о новом разделе, напишу в LOR, что-то вроде обучения. Кто-то, кто умеет, даёт уроки. Пойду в LOR с этой идеей.

Loki13 ★★★★★
()