Глава 32 – Диалоговые окна

Диалоговые окна

Приобрести книгу можно на сайте ozon.ru и в электронном виде на Google Play:
Приобрести книгу о Qt и C++ на Ozon.ru Купить книгу о Qt и C++ на Goole Play

3 thoughts on “Глава 32 – Диалоговые окна

  1. Здравствуйте, Макс!
    В главе 32 приводится пример программы создания собственного диалогового окна. Поставил дополнительную задачу: если значение полей First Name и Last Name (QLineEdit) равно “Иван” или “Иванов”, то выделяй текст.
    Реализовал это с помощью создания нового класса MyLineEdit наслудуемого от класса QLineEdit. В классе InputDialog использую элементы своего класса (MyLineEdit).
    объявление:
    class MyLineEdit : public QLineEdit {
    Q_OBJECT

    protected:
    virtual void mousePressEvent(QMouseEvent *) override;
    };

    реализация:
    void MyLineEdit::mousePressEvent(QMouseEvent *) {
    if(text() == “Иван” || text() == “Иванов”) selectAll();
    }

    Если в текстовом поле вписаны слова “Иван” или “Иванов”, то они выделяются, как и было задумано, но если в поле вписаны другие слова, то появляется следующая проблема – не получается курсор с помощью указателя мыши постадвить в нужное место текста (только в конец текста). Т.е. если в текстовое поле (MyLineEdit) вписано, например, “Александра”, я не могу с помощью указателя мыши установить курсор в середину слова (например, между буквами “к” и “с”). Почему так происходит, объясните, пожалуйста? Есть ли возможность это исправить? Возможно эту задачу можно решить иным способом…

    1. Здравствуйте, Вячеслав!
      скорее всего Вы просто забыли передать объект события дальше в наследованный класс. То есть код должен вяглядить так
      void MyLineEdit::mousePressEvent(QMouseEvent* pe) {
      if(text() == “Иван” || text() == “Иванов”) selectAll();
      QLineEdit::mousePressEvent(pe); //!!! передаем объект события дальше
      }

      1. Макс, огромное спасибо за оперативный ответ! Да, всё работает, единственное код должен быть таким в моем случае:
        void MyLineEdit::mousePressEvent(QMouseEvent *pe) {
        if(text() == “Иван” || text() == “Иванов”) selectAll();
        else QLineEdit::mousePressEvent(pe);
        }
        Иначе, при клике мышкой по текстовому полю текст не выделяется, как предполагалось (возможно это условие я не обозначил изначально). Смысл условия такой: в поля вписаны имя и фамилия как пример, но при клике мышкой по полю, если там вписаны “Иван”, или “Иванов”, слово-пример должно выделяться, чтобы можно было сразу вводить свои имя и фамилию (если данные, “Иван” и “Иванов”, не подходят).
        Спасибо большое за подсказку!

Добавить комментарий