Russian Qt Forum
Ноябрь 26, 2024, 00:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Как перехватить нажатие клавиши в QInputDialog?  (Прочитано 11496 раз)
Bork
Гость
« : Апрель 09, 2013, 11:44 »

Здравствуйте.
Стоит задача перехватить нажатие клавиши в строке ввода QInputDialog.
Для этого создан класс MyInputDigit на базе QInputDialog
Где переопределена функция keyPressEvent.
К сожалению, конструкция не работает.
Я подозреваю, что переопределение функции keyPressEven в данном случае неверный путь, но как сделать правильно я не знаю.
Помогите, пожалуйста.

Код:
class MyInputDigit :public QInputDialog
{
public:
    MyInputDigit(QWidget *parent = 0):QInputDialog(parent)
    {
    }
    void keyPressEvent(QKeyEvent *event)
    {
        ShowMessage("text");
    }
};
ShowMessage("text") - Выводит сообщение с помощью QMessageBox и работает нормально.

Вызов диалога:

Код:
    bool bOk;
    MyInputDigit::getText( 0, "Ввод:", "ВВЕДИТЕ НОМЕР", QLineEdit::Normal, "", &bOk);
   
« Последнее редактирование: Апрель 09, 2013, 11:48 от Bork » Записан
mutineer
Гость
« Ответ #1 : Апрель 09, 2013, 11:48 »

сигнал textValueChanged ( const QString & text ) не подойдет?
Записан
Bork
Гость
« Ответ #2 : Апрель 09, 2013, 11:54 »

сигнал textValueChanged ( const QString & text ) не подойдет?

Я правильно понимаю, что класс будет выглядеть таким образом?
Код:
class MyInputDigit :public QInputDialog
{
public:
    MyInputDigit(QWidget *parent = 0):QInputDialog(parent)
    {
    }
    void textValueChanged(const QString &text)
    {
        ShowMessage(text);
    }
};

Если да, то не работает:(
Записан
mutineer
Гость
« Ответ #3 : Апрель 09, 2013, 11:57 »

Нет, понимаешь неправильно. Читай про сигналы/слоты
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Апрель 09, 2013, 12:28 »

2 Bork:
Коли используешь статическую функцию QInputDialog::getText() наследоваться от QInputDialog можешь до посинения)
Записан

Qt 5.11/4.8.7 (X11/Win)
Bork
Гость
« Ответ #5 : Апрель 09, 2013, 12:32 »

Нет, понимаешь неправильно. Читай про сигналы/слоты

Хорошо, усложняю:
MyInputDigit.h
Код:
class MyInputDigit :public QInputDialog
{
public:
    MyInputDigit(QWidget *parent = 0);
    void textValChanged();

};

MyInputDigit.cpp
Код:
MyInputDigit::MyInputDigit(QWidget *parent):QInputDialog(parent)
{
    connect(this, SIGNAL(textValueChanged(const QString &text)), this, SLOT(textValChanged()));
}

void MyInputDigit::textValChanged()
{
    ShowMessage("text");
}

В такой реализации тоже не работает.
Тут мне непонятно, к чему привязывать сигнал. Когда есть кнопка то все понятно, привязываешь к кнопке и пишешь реализацию, а тут?
« Последнее редактирование: Апрель 09, 2013, 12:34 от Bork » Записан
Bork
Гость
« Ответ #6 : Апрель 09, 2013, 12:34 »

2 Bork:
Коли используешь статическую функцию QInputDialog::getText() наследоваться от QInputDialog можешь до посинения)


Почему?
Я же использую getText() от наследника.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Апрель 09, 2013, 12:36 »

Почему?
Я же использую getText() от наследника.
А толку-то, коли она статическая?
Запускай свой MyInputDigit через exec() и получишь результат)
Записан

Qt 5.11/4.8.7 (X11/Win)
Bork
Гость
« Ответ #8 : Апрель 09, 2013, 12:57 »

А толку-то, коли она статическая?
Запускай свой MyInputDigit через exec() и получишь результат)

Возвращаемся к коду из первого поста
теперь вызов такой:
Код:
    MyInputDigit *Inp = new MyInputDigit;
    Inp->exec();

тоже не работает:(
Записан
mutineer
Гость
« Ответ #9 : Апрель 09, 2013, 13:07 »

Код:
class MyInputDigit :public QInputDialog
{
public:
    MyInputDigit(QWidget *parent = 0);
    void textValChanged();

};

Код:
MyInputDigit::MyInputDigit(QWidget *parent):QInputDialog(parent)
{
    connect(this, SIGNAL(textValueChanged(const QString &text)), this, SLOT(textValChanged()));
}

void MyInputDigit::textValChanged()
{
    ShowMessage("text");
}

В такой реализации тоже не работает.

Конечно не работает, textValChanged() это не слот, а просто метод
Записан
Bork
Гость
« Ответ #10 : Апрель 09, 2013, 14:17 »

Конечно не работает, textValChanged() это не слот, а просто метод

Исправил, теперь так:
Код:
class MyInputDigit :public QInputDialog
{
public:
    MyInputDigit(QWidget *parent = 0);

public slots:
    void textValChanged();
};

Код:
MyInputDigit::MyInputDigit(QWidget *parent):QInputDialog(parent)
{
    connect(this, SIGNAL(textValueChanged(const QString &text)), this, SLOT(textValChanged()));
}

void MyInputDigit::textValChanged()
{
    ShowMessage("text");
}

Не помогло.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Апрель 09, 2013, 14:22 »

Мде...
Где в теле MyInputDigit Q_OBJECT макрос?

Может всё-таки взять и прочитать наконец-то про Сигналы и слоты, а не плакаться, что ничего не работает?
« Последнее редактирование: Апрель 09, 2013, 14:25 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #12 : Апрель 09, 2013, 14:36 »

Не помогло.

Прочитай доку по сигналам как написано выше и пойми её. Без этого никуда.
Записан
Bork
Гость
« Ответ #13 : Апрель 09, 2013, 16:57 »

Мде...
Где в теле MyInputDigit Q_OBJECT макрос?

Может всё-таки взять и прочитать наконец-то про Сигналы и слоты, а не плакаться, что ничего не работает?

Спасибо, документацию прочитал, макрос поставил.

В моем случае, насколько я понял, сигнал textValueChanged испускает объект MyInputDigit, он же и принимает.
Получается, что написанный в конструкторе класса 
    connect(this, SIGNAL(textValueChanged(const QString &text)), this, SLOT(textValChanged()));
написан правильно, или я опять ошибаюсь?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Апрель 09, 2013, 17:01 »

написан правильно, или я опять ошибаюсь?
да, правильно
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.171 секунд. Запросов: 22.