Михаиллл
Nov. 16, 2018, 4:56 p.m.

Как забрать текст из QLineEdit, при условии, что виджетов много

Qt, QLineEdit

Здравствуйте.

Добавил в VerticalLayout много виджитов. Часть из них QLineEdit. Следующих кодом я определяю QLineEdit на моем VerticalLayout. Но не могу получить из него текст. ui->w->text(); не работает.

  1. for (int i = 0; i <= ui->SearchVerticalLayout->count() - 2; i++)
  1. {
  1. QWidget* w = ui->SearchVerticalLayout->itemAt(i)->widget();
  1. QString ClassName = w->metaObject()->className();
  1. if (ClassName == "QLineEdit")
  1. {
  1. QString Test2;
  1. //Test2 = ui->w->text();
  1. qDebug()<< Test2;
  1. }

  1. }



3
The question is asked by the articleQt/C++ - Lesson 014. Dynamic creation of widgets in Qt

Do you like it? Share on social networks!

5
Александр Панюшкин
  • Nov. 16, 2018, 5:07 p.m.
  • (edited)

А почему ui->w? У вас же w и есть объект. Его просто надо привести кастом к QLineEdit и делать с ним что хотите.


Да и если делать через qcast, тогда не нужна проверка через ClassName (на мой взгляд это не очень красиво).

Синтаксис:

TYPE qobject_cast<TYPE>(QObject *object)

Если вернёт nullptr, значит искомый объект не того типа.


    Evgenii Legotckoi
    • Nov. 16, 2018, 5:08 p.m.

    Добрый день, попробуйте так

    1. for (int i = 0; i <= ui->SearchVerticalLayout->count() - 2; i++)
    2. {
    3. QWidget* w = ui->SearchVerticalLayout->itemAt(i)->widget();
    4. if (QLineEdit* lineEdit = static_cast<QWidget*>(w))
    5. {
    6. qDebug() << lineEdit->text();
    7. }
    8. }
      Михаиллл
      • Nov. 16, 2018, 5:17 p.m.

      Qt ругается на if (QLineEdit* lineEdit = static_cast<QWidget*>(w))

      D:\QTProject\ReaderResume\mainwindow.cpp:758: ошибка: cannot bind rvalue '(QLineEdit*)((MainWindow*)this)->MainWindow::ui->Ui::MainWindow::<anonymous>.Ui_MainWindow::SearchVerticalLayout->QVBoxLayout::<anonymous>.QBoxLayout::itemAt(i)->QLayoutItem::widget()' to 'QLineEdit*&'


        Evgenii Legotckoi
        • Nov. 16, 2018, 5:44 p.m.

        Сорян, чушь написал в условии, так правильно будет

        1. if (QLineEdit* lineEdit = dynamic_cast<QLineEdit*>(w))
          Михаиллл
          • Nov. 16, 2018, 8:42 p.m.

          спасибо

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            • Last comments
            • IscanderChe
              April 12, 2025, 5:12 p.m.
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              April 1, 2025, 11:41 a.m.
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              March 9, 2025, 9:02 p.m.
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              March 9, 2025, 4:14 p.m.
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
            • ИМ
              Nov. 22, 2024, 9:51 p.m.
              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…