Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Послать сигнал по нажатию клавиш

Автор: FenixTES 20.11.2009, 10:04

нужно сделать через QAction, я то пробывал, даже делал как в вассистенте(тока там чуть другой пример), но ничего не работало

QAction *qatmp = new QAction(this);
    qatmp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Enter));
    connect(qatmp,SIGNAL(triggered()), qpbSend, SLOT(slot1()));

пробыват так
qatmp->setShortcut(QKeySequence(tr("CTRL+ENTER")));

и так
qatmp->setShortcut(QKeySequence(tr("Ctrl+Enter")));

всеравно почему то не пашет...
может я что-то неправильно сделал?

Автор: Litkevich Yuriy 20.11.2009, 10:29

FenixTES, ты хочешь, чтобы некий твой виджет принимал комбинацию клавиш?
Если да, то не забывай назначить действие (QAction) этому виджету с помощью, например:

    QAction * togleFullScreen = new QAction(this);
    togleFullScreen->setShortcut(tr("Ctrl+W"));
    addAction(togleFullScreen);
    connect(togleFullScreen, SIGNAL(triggered()), this, SLOT(togleFullScreen()));

Автор: FenixTES 20.11.2009, 11:29

Цитата(Litkevich Yuriy @ 20.11.2009, 10:29) *
FenixTES, ты хочешь, чтобы некий твой виджет принимал комбинацию клавиш?
Если да, то не забывай назначить действие (QAction) этому виджету с помощью, например:
    QAction * togleFullScreen = new QAction(this);
    togleFullScreen->setShortcut(tr("Ctrl+W"));
    addAction(togleFullScreen);
    connect(togleFullScreen, SIGNAL(triggered()), this, SLOT(togleFullScreen()));

вроде сделал, как ты показал, но всеравно не пашет...
 QAction *qatmp = new QAction(this);
    qatmp->setShortcut(tr("Ctrl+Enter"));
    this->addAction(qatmp);
    connect(qatmp,SIGNAL(triggered()), qpbSend,SLOT(slotSendMess()));

так окошко QWidget с двумя QTextEdit'ами и кнопкой, я чтото ввожу в текстедите нажимаю Ctrl+Enter, ну а дальше должна вызваться некая функция...
может не пашет , потому что фокус у QTextEdit'а?

Автор: Litkevich Yuriy 20.11.2009, 11:32

Цитата(FenixTES @ 20.11.2009, 14:29) *
потому что фокус у QTextEdit'а?
попробуй ему тоже установить это "действие"

П.С. и целыми сообщениями не цитируй, в этом нет нужды

Автор: FenixTES 20.11.2009, 11:51

Цитата(Litkevich Yuriy @ 20.11.2009, 11:32) *
Цитата(FenixTES @ 20.11.2009, 14:29) *
потому что фокус у QTextEdit'а?
попробуй ему тоже установить это "действие"

поставил на этот текстэдит, но всеравно не пашет...
ЗЫ плохо, что тут нет грусных смайлов...

Автор: Litkevich Yuriy 20.11.2009, 12:07

помести в свой слот slotSendMess вывод в консоль (qDebug() << "some text";) и посмотри при фокусе на разных виджетах срабатывает слот или нет.

в моём примере, Действие назначено виджету-окну, если я выделяю ячейку в виджете-таблице (т.е. фокус на ней), то комбинация клавиш всё равно действует

Автор: FenixTES 20.11.2009, 14:02

Цитата(Litkevich Yuriy @ 20.11.2009, 12:07) *
помести в свой слот slotSendMess вывод в консоль (qDebug() << "some text";) и посмотри при фокусе на разных виджетах срабатывает слот или нет.

в моём примере, Действие назначено виджету-окну, если я выделяю ячейку в виджете-таблице (т.е. фокус на ней), то комбинация клавиш всё равно действует

застрелица... неоткуда не пашет... не посылает сигнал и все... незнаю на что еще и гнать... а не может быть это потому что это окно идет с флагом ToolTip?

Автор: Litkevich Yuriy 20.11.2009, 14:05

Цитата(FenixTES @ 20.11.2009, 17:02) *
а не может быть это потому что это окно идет с флагом ToolTip?
ну это легко проверить, убери этот флаг ради теста.
Вопрос: А сигнал со слотом точно соединился? (в консоли по этому поводу ругани не было?)

Автор: FenixTES 20.11.2009, 14:11

Цитата(Litkevich Yuriy @ 20.11.2009, 14:05) *
Цитата(FenixTES @ 20.11.2009, 17:02) *
а не может быть это потому что это окно идет с флагом ToolTip?
ну это легко проверить, убери этот флаг ради теста.
Вопрос: А сигнал со слотом точно соединился? (в консоли по этому поводу ругани не было?)

у меня на этот слот еще повешена кнопка, то есть сам слот пашет, ругани не было

такс, убрал флаг, но все по прежнему

Автор: Litkevich Yuriy 20.11.2009, 14:38

Цитата(FenixTES @ 20.11.2009, 17:11) *
у меня на этот слот еще повешена кнопка, то есть сам слот пашет,
это отдельное соединение, и я спрашивал не о слоте, а о соединении.

сделай тестовое приложение, на основе текущего, выкинув всё лишнее.

Автор: MoPDoBoPoT 20.11.2009, 17:55

На клавиатуре есть две клавиши Enter, причем их коды различны:
Qt::Key_Return - большой Enter, на основном разделе клавы
Qt::Key_Enter - в разделе с num-keys
Может он у тебя ждет нажатия того Enter'а, который с num-keys, а ты жмешь "большой"?
Попробуй такой код:

...
qatmp->setShortcut(QKeySequence(Qt::CTRL, Qt::Key_Return));
...

Автор: FenixTES 20.11.2009, 18:12

Цитата(MoPDoBoPoT @ 20.11.2009, 17:55) *
На клавиатуре есть две клавиши Enter, причем их коды различны:
Qt::Key_Return - большой Enter, на основном разделе клавы
Qt::Key_Enter - в разделе с num-keys
Может он у тебя ждет нажатия того Enter'а, который с num-keys, а ты жмешь "большой"?
Попробуй такой код:
...
qatmp->setShortcut(QKeySequence(Qt::CTRL, Qt::Key_Return));
...

заработало))) спс)))

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)