t
tetta16 травня 2017 р. 15: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 р. 15:39

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

    t
    • 16 травня 2017 р. 15:50
    Вот
      Evgenii Legotckoi
      • 16 травня 2017 р. 23: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 р. 15:50

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

                      Evgenii Legotckoi
                      • 17 травня 2017 р. 23:46

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

                        Коментарі

                        Only authorized users can post comments.
                        Please, Log in or Sign up
                        AD

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:50бали,
                        • Рейтинг балів-4
                        m
                        • molni99
                        • 26 жовтня 2024 р. 01:37

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:80бали,
                        • Рейтинг балів4
                        m
                        • molni99
                        • 26 жовтня 2024 р. 01:29

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:20бали,
                        • Рейтинг балів-10
                        Останні коментарі
                        ИМ
                        Игорь Максимов22 листопада 2024 р. 11:51
                        Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                        Evgenii Legotckoi
                        Evgenii Legotckoi31 жовтня 2024 р. 14:37
                        Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                        A
                        ALO1ZE19 жовтня 2024 р. 08:19
                        Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                        ИМ
                        Игорь Максимов05 жовтня 2024 р. 07:51
                        Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                        d
                        dblas505 липня 2024 р. 11:02
                        QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        Тепер обговоріть на форумі
                        Evgenii Legotckoi
                        Evgenii Legotckoi24 червня 2024 р. 15:11
                        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                        t
                        tonypeachey115 листопада 2024 р. 06:04
                        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                        NSProject
                        NSProject04 червня 2022 р. 03:49
                        Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                        9
                        9Anonim25 жовтня 2024 р. 09:10
                        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                        Слідкуйте за нами в соціальних мережах