Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Flakes от Октябрь 26, 2009, 04:27



Название: Shortcut читатель
Отправлено: Flakes от Октябрь 26, 2009, 04:27
Сорри за кривое название топика. Это скрин из дизайнера:
(http://i37.tinypic.com/1pxv21.png)

Как вот такое поле реализовывается? Оно считывает нажатые клавишы.


Название: Re: Shortcut читатель
Отправлено: Vexator от Октябрь 26, 2009, 05:22
void setShortcut ( const QKeySequence & key )


Название: Re: Shortcut читатель
Отправлено: spirit от Октябрь 26, 2009, 10:19
используй QKeyEvent + QKeyEvent::text.


Название: Re: Shortcut читатель
Отправлено: Flakes от Октябрь 26, 2009, 21:27
Не особо догадываюсь что с этим делать, но попробую. Спасибо!


Название: Re: Shortcut читатель
Отправлено: spirit от Октябрь 26, 2009, 21:32
установи ивент фильтр на лайнЭдит и отлавливае QKeyEvent,
а затем устанавливай текст в лайнЭдит.


Название: Re: Shortcut читатель
Отправлено: Flakes от Октябрь 29, 2009, 04:13
Может кому пригодится.
Код
C++ (Qt)
void MyWidget::keyPressEvent(QKeyEvent *e)
{
int keyInt = e->key();
QString seqStr = QKeySequence(e->key()).toString();
if ( seqStr.isEmpty() ||
keyInt == Qt::Key_Control ||
keyInt == Qt::Key_Alt || keyInt == Qt::Key_AltGr ||
keyInt == Qt::Key_Shift
)
{
return;
}
QStringList strSequence;
if (e->modifiers() & Qt::ControlModifier)
strSequence << "Ctrl";
if (e->modifiers() & Qt::AltModifier)
strSequence << "Alt";
if (e->modifiers() & Qt::ShiftModifier)
strSequence << "Shift";
QMessageBox::information(this,
"QKeySequence", strSequence.join(" + ") +
(strSequence.isEmpty() ? "" : " + ") +
seqStr);
}