crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Кнопка по умолчанию.
JuryS1806
  опции профиля:
сообщение 10.11.2009, 21:26
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Здравствуйте. доброго времени суток. Прошу помочь, если кто знает, как можно назначить кнопку по умолчанию. После того как будет написан текст в QLineEdit.

Вот до чего я уже дошел:

void MainWindow::textChangedMacro(const QString &newText)
{
ExecuteButton->setEnabled(!newText.isEmpty()); //Здесь делаю кнопку включенной при изменении текста в

А дальше не знаю, как сделать эту кнопку исполняемой при нажатии Enter, т.е. кнопкой по умолчанию
}

При том что в примерах такие программы есть. QtDBusChat к примеру. И все здесь супер работает ! ТОЛЬКО УЖЕ НЕДЕЛЮ не разберусь как !

Прошу помочь.

ExecuteButton->raise(); не помогает
ExecuteButton->focusWidget(); тоже не помогает.!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.11.2009, 21:33
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


почему то никогда не задумывался над этим
просто соединял необходимый слот с сигналом ентера в лайнедите.

а по какому событию ты считаешь что текст написан ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 10.11.2009, 21:37
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Посмотри: QPushButton::setAutoDefault
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 10.11.2009, 22:07
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


ExecuteButton->setDisabled(1); //По умолчанию кнопка Выполнить отключена
connect(lineEdit, SIGNAL(textChanged(QString)),this, SLOT(textChangedMacro(QString))); //Событие на изменение строки команды

а затем следует то чего я писал сверху. Кнопка становится активной, если хотя бы один символ напечатать. Только вот по Enter'y ничего не происходит, хотя если на кнопку нахать мышью, соответственно работает сигнал clicked.

А как Вы на Enter событие вешаете ?

Эта чудо-кнопка ExecuteButton создана в Виджете searchlineedit. Этот виджет напоминает строку ввода адреса в браузере, слева картиночка, затем строка и в конце кнопка.

У моей замечательной кнопки ExecuteButton нет SetAutoDefault. Есть только SetAutoRepeat, setAutoExclusive, setAutoFillBackground, SetAutoRepeatDelay, SetAutoRepeatInterval !


Цитата(JuryS1806 @ 10.11.2009, 21:47) *
ExecuteButton->setDisabled(1); //По умолчанию кнопка Выполнить отключена
connect(lineEdit, SIGNAL(textChanged(QString)),this, SLOT(textChangedMacro(QString))); //Событие на изменение строки команды

а затем следует то чего я писал сверху. Кнопка становится активной, если хотя бы один символ напечатать. Только вот по Enter'y ничего не происходит, хотя если на кнопку нахать мышью, соответственно работает сигнал clicked.

А как Вы на Enter событие вешаете ?

Эта чудо-кнопка ExecuteButton создана в Виджете searchlineedit. Этот виджет напоминает строку ввода адреса в браузере, слева картиночка, затем строка и в конце кнопка.

У моей замечательной кнопки ExecuteButton нет SetAutoDefault. Есть только SetAutoRepeat, setAutoExclusive, setAutoFillBackground, SetAutoRepeatDelay, SetAutoRepeatInterval !


QAbstractButton. Это виджет, в котором создана моя замечательная кнопка. И судя по всему, и умолчание на эту кнопку включается другими методами !!!! Гораздо легче узнать, как обработать событие на нажатие Enter. Подскажите ???

Нашел выход из положения !
Тему можно считать закрытой, спасибо за участие.

ExecuteButton->setShortcut(tr("Enter"));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 10.11.2009, 22:13
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как вариант:
void CMyWidget::keyPressEvent(QKeyEvent *pKeyEvent) 
{
     if( pKeyEvent->key() == Qt::Key_Return)
     {
          // Здесь твой код
     }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 10.11.2009, 23:00
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Тоже вариант, сейчас попробую. А вот интересно, когда я записал setShortcut(tr("Enter")). Все работает отлично, только Enter-ом с цифровой клавиатуры, а основной Enter молчит. Значит все-таки это разные клавиши ! И как интересно все-таки их установить одновременно ...

Return - клавиша Enter.
Enter - та же клавиша, только с цифровой клавы.

А как одновременно их сделать ??? Где-то на форуме об этом я уже читал. Сейчас попробую поискать.

Сделал так:


ExecuteButton->setShortcut(tr("Return")); //Начначаю клавишу Enter (основную)

А для обработки команды с Enter'a цифровой клавиатуры:

void MainWindow::keyPressEvent(QKeyEvent *pKeyEvent)
{
if( pKeyEvent->key() == Qt::Key_Enter)
{
sendClickedMacroExec();
}
}

Вот и все получилось общими усилиями, спасибо за помощь. Надеюсь, кому-нибудь пригодится подобный мануал по назначению горячих клавиш !!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.11.2009, 3:59
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(JuryS1806 @ 11.11.2009, 0:26) *
ExecuteButton->raise(); не помогает
и не поможет, этот метод только для окна действует или стека виджетов.

А вообще задачка простая:
connect(lineEdit, SIGNAL(editingFinished()),ExecuteButton, SLOT(setFocus())); //Событие на изменение строки команды
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 11.11.2009, 7:54
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Да было бы не плохо так, только у меня не обычный виджет. А searchlineedit. Думаю из за этого я так с ним завис. Но все равно, спасибо за подсказку.

void MainWindow::keyPressEvent(QKeyEvent *pKeyEvent) //Перехват нажатия клавиш с клавиатуры
{
     if( pKeyEvent->key() == Qt::Key_Enter)     //Если нажат Enter на цифровой клавиатуре
     {
        if(ExecuteButton->isEnabled()) { sendClickedMacroExec(); }
     }
     if( pKeyEvent->key() == Qt::Key_Return)    //Если нажат Enter основной
     {
        if(ExecuteButton->isEnabled()) { sendClickedMacroExec(); }
     }
     if( pKeyEvent->key() == Qt::Key_Escape)    //Если нажат Escape во время ввода команды
     {
        if(ExecuteButton->isEnabled()) { lineEdit->setText(QString()); }
     }
}

Вот что получилось у меня в итоге. Мне нравится, как работает !
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.11.2009, 8:46
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(JuryS1806 @ 11.11.2009, 10:54) *
только у меня не обычный виджет. А searchlineedit.
ну и что:
...
class Q4CW_SLE_EXPORT LineEdit : public QLineEdit
{
...
}

class Q4CW_SLE_EXPORT SearchLineEdit : public LineEdit
{
...
}
он же наследник QLineEdit
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 11.11.2009, 12:50
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


вообще еще проще делал
connect(line,SIGNAL(editingFinished ()),this,SLOT(sl()));
connect(button,SIGNAL(clicked()),this,SLOT(sl()));

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 4:43