t
tettaМамыр 16, 2017, 3:27 Т.Қ.

TextChanged

qt, txtchanged

У меня ошибка, подскажите, что не так? Заголовочный:

#ifndef NEWF_H
#define NEWF_H

#include <QDialog>
#include <QString>

namespace Ui {
class newF;
}

class newF : public QDialog
{
    Q_OBJECT

public:
    explicit newF(QWidget *parent = 0);
    ~newF();

private:
    Ui::newF *ui;

private slots:
    void cls(){
        close();
    }
    void Ok();
    void TextChanged(const QString &text);

};

#endif // NEWF_H
Реализующий:
#include "newf.h"
#include "ui_newf.h"
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLineEdit>
#include <QString>

#include "stylehelper.h"
#include "mainarea.h"

newF::newF(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::newF)
{
    ui->setupUi(this);



    QLabel *newf = new QLabel("Name:",this);
    QLineEdit *name = new QLineEdit(this);
    newf->setBuddy(name);
    connect(name, SIGNAL(textChanged(const QString &)), this, SLOT(TextChanged(const QString &)));

    QPushButton *ok = new QPushButton("OK",this);
    ok->setDefault(true);
    ok->setEnabled(false);
    connect(ok,SIGNAL(triggered()),this,SLOT(Ok()));
    QPushButton *close = new QPushButton("Close",this);
    connect(close,SIGNAL(clicked()),this,SLOT(cls()));

    QHBoxLayout *hb1 = new QHBoxLayout;
    hb1->addWidget(newf);
    hb1->addWidget(name);
    QHBoxLayout *hb = new QHBoxLayout;
    hb->addWidget(ok);
    hb->addWidget(close);
    QVBoxLayout *vb = new QVBoxLayout;
    vb->addLayout(hb1);
    vb->addLayout(hb);

    setLayout(vb);
}

newF::~newF()
{
    delete ui;
}

void newF::Ok(){
    MainArea *mdi;
    mdi->show();
}

void newF::TextChanged(const QString &text){
    if(!name.text().isEmpty)
     ok->setEnabled (true);
}
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

11
R
  • Мамыр 16, 2017, 3:39 Т.Қ.

Может кто поумнее сразу увидит, но может вы скриншот с текстом ошибки выложите? Так явно буде проще.

    t
    • Мамыр 16, 2017, 3:50 Т.Қ.
    Вот
      Evgenii Legotckoi
      • Мамыр 16, 2017, 11:59 Т.Қ.

      Локально объявленные переменные видны только в пределах функции.

      // Это объявлено объявлено в конструкторе
      QLineEdit *name = new QLineEdit(this);

      Соответственно в этом методе данная переменная не будет видна

      void newF::TextChanged(const QString &text){
          if(!name.text().isEmpty)
           ok->setEnabled (true);
      }

      Поэтому объявляйте переменную в заголовочном файле .

        t
        • Мамыр 17, 2017, 10:07 Т.Ж.

        Вот так вот, да?

        #ifndef NEWF_H
        #define NEWF_H
        
        #include <QDialog>
        #include <QString>
        #include <QLineEdit>
        
        namespace Ui {
        class newF;
        }
        
        class newF : public QDialog
        {
            Q_OBJECT
        
        public:
            explicit newF(QWidget *parent = 0);
            ~newF();
        
        private:
            Ui::newF *ui;
        
            QLineEdit name;
        
        private slots:
            void cls(){
                close();
            }
            void ok();
            void TextChanged(const QString &text){
                if(!name.isEmpty)
                ok->setEnabled (true);
            }
        
        };
        
        #endif // NEWF_H
        
        У меня все равно не работает
          Evgenii Legotckoi
          • Мамыр 17, 2017, 10:28 Т.Ж.

          Вы даже в свой код не смотрите, когда переписываете его...

          Было так:

          QLineEdit *name = new QLineEdit(this);

          Должно быть тогда так в заголовочном файле:

           QLineEdit *name;

          Далее слот. Было

          void newF::TextChanged(const QString &text){
              if(!name.text().isEmpty)
               ok->setEnabled (true);
          }

          Вы написали

          void TextChanged(const QString &text){
                  if(!name.isEmpty)
                  ok->setEnabled (true);
              }
            Evgenii Legotckoi
            • Мамыр 17, 2017, 10:31 Т.Ж.

            и кстати... функцию как попало написали

            name.text().isEmpty() // куда скобки потеряли?
              t
              • Мамыр 17, 2017, 10:55 Т.Ж.

              поправил:

              #ifndef NEWF_H
              #define NEWF_H
              
              #include <QDialog>
              #include <QString>
              #include <QLineEdit>
              
              namespace Ui {
              class newF;
              }
              
              class newF : public QDialog
              {
                  Q_OBJECT
              
              public:
                  explicit newF(QWidget *parent = 0);
                  ~newF();
              
              private:
                  Ui::newF *ui;
              
                  QLineEdit *name;
              
              private slots:
                  void cls(){
                      close();
                  }
                  void Ok();
                  void TextChanged(const QString &text){
                      if(!name.text().isEmpty())
                      ok->setEnabled (true);
                  }
              
              };
              
              #endif // NEWF_H
              
              Но все равно не работает?
                t
                • Мамыр 17, 2017, 10:56 Т.Ж.

                Извините, это не должен быть знак вопроса, а восклицания.

                  Evgenii Legotckoi
                  • Мамыр 17, 2017, 12:38 Т.Қ.

                  А вы знаете в чем разница между

                  name.text()

                  и

                  name->text()

                  ?

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

                  Для наводки: поищите информацию по указателям, сохранению объектов в куче и в стеке. Это касается основ C++, а не самого Qt фреймворка.

                    t
                    • Мамыр 17, 2017, 3:50 Т.Қ.

                    А как сделать так, что я вот ввожу туда что-то и то название mdi?

                      Evgenii Legotckoi
                      • Мамыр 17, 2017, 11:46 Т.Қ.

                      У QLineEdit есть метод text() , который возвращает QString , у QWidget есть метод setTitle() , которая в качестве аргумента ппринимает QString

                        Пікірлер

                        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                        Кіріңіз немесе Тіркеліңіз
                        Г

                        C++ - Тест 001. Первая программа и типы данных

                        • Нәтиже:66ұпай,
                        • Бағалау ұпайлары-1
                        t

                        C++ - Тест 001. Первая программа и типы данных

                        • Нәтиже:33ұпай,
                        • Бағалау ұпайлары-10
                        t

                        Qt - Тест 001. Сигналы и слоты

                        • Нәтиже:52ұпай,
                        • Бағалау ұпайлары-4
                        Соңғы пікірлер
                        G
                        GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                        Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                        d
                        dblas5Шілде 5, 2024, 11:02 Т.Ж.
                        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        k
                        kmssrАқп. 8, 2024, 6:43 Т.Қ.
                        Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        АК
                        Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                        Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        Енді форумда талқылаңыз
                        Evgenii Legotckoi
                        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                        F
                        FynjyШілде 22, 2024, 4:15 Т.Ж.
                        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                        BlinCT
                        BlinCTМаусым 25, 2024, 1 Т.Ж.
                        Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                        BlinCT
                        BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                        Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                        Evgenii Legotckoi
                        Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                        Бізді әлеуметтік желілерде бақылаңыз