Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 7 / 3
Регистрация: 27.05.2017
Сообщений: 89
Записей в блоге: 10
1

Почему после нажатия на мышку перестают работать клавиши

23.11.2017, 19:44. Показов 944. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть программа: если я нажимаю на клавишу "стрелка вверх" или на "d", то текст в программе меняется правильно. Но стоит один раз нажать левую кнопку мышки и/или правую, как клавиши "стрелка вверх" или "d" перестают работать. Почему? Почему текст не меняется и после нажатия и клавиш, и мышки?

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import QtQuick 2.2
 
Rectangle {
    width: 560
    height: 200
    color:  "lightgreen"
 
    property string mtext: "Привет, Вася!"
    property int msize: 11
 
    focus: true
    Keys.onPressed:  {
            if (event.key == Qt.Key_Up)
 
                mtext = "Key_Up"
 
            if (event.key == Qt.Key_D)
                mtext = "Key_D"
 
        }
 
    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.RightButton
 
        onPressed: {
            if (mouse.button == Qt.RightButton ) {
                text1.color = "red"
                text1.text = "На правую"
 
                msize = 48
            } else if (mouse.button == Qt.LeftButton){
                text1.color = "blue"
                mtext = "На левую"
                msize = 148
            }
 
        }
        //onReleased: parent.color = "lightgreen"
    }
 
    Text {
        id: text1
 
        font.pointSize: msize
        anchors.centerIn: parent
        text: mtext
    }
}
Добавлено через 25 минут
В общем, я нашёл решение: оно работает.

Но всё равно непонятно, почему не работает вариант выше. Теперь вопрос не в том, как написать правильно, а почему не работает вариант ваше.

Вот нашёл правильный вариант.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import QtQuick 2.2
 
Rectangle {
    width: 560
    height: 200
    color:  "lightgreen"
 
    property string mtext: "Привет, Вася!"
    property int msize: 11
 
    focus: true
 
    Keys.onPressed:  {
          console.log("key has been pressed "+ event.key);
          if (event.key == Qt.Key_D) {
              console.log("D "+ event.key);
                //mtext = "Key_D"
                text1.text = "Key_D"
            }
 
          if (event.key == Qt.Key_F) {
              console.log("F "+ event.key);
                //mtext = "Key_F"
              text1.text = "Key_F"
            }
    }
 
    /*
    Keys.onPressed: {
          console.log("key has been pressed "+ event.key);
      }
    */
 
    /*
    Keys.onPressed: {
 
        if (event.key == Qt.Key_Up) {
            mtext = "Key_Up"
        }
    }
    */
 
    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.RightButton
 
        onPressed: {
            if (mouse.button == Qt.RightButton ) {
                text1.color = "red"
                text1.text = "На правую"
 
                msize = 48
            } else if (mouse.button == Qt.LeftButton){
                text1.color = "blue"
                mtext = "На левую"
                msize = 148
            }
 
        }
        //onReleased: parent.color = "lightgreen"
    }
 
    Text {
        id: text1
 
        font.pointSize: msize
        anchors.centerIn: parent
        text: mtext
 
 
    }
 
}
 Комментарий модератора 
Код QML выделяется тегом JS, тк QML является расширение JS.
Правила именования тем и оформления сообщений в разделе Qt
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2017, 19:44
Ответы с готовыми решениями:

После действий с формой (показать, скрыть, свернуть и т.п.) перестают работать горячие клавиши
Здравствуйте, уважаемые форумчане! Столкнулся с такой проблемой: после действий с формой...

Lenovo b575e - Перестает работать тачпад после нажатия любой клавиши на клавиатуре
Здравствуйте, уважаемые форумчане. После загрузки ОС, если нажать на любую клавишу на клавиатуре,...

Почему перестают работать ссылки при создании ЧПУ?
Здравствуйте, хочется чтоб на сайте ссылки были вида http://localhost/arts/67/33, написал такой...

После нажатия клавиши Enter или нажатия на Button
Помогите пожалуйста.:-[ Задача: После нажатия клавиши Enter или нажатия на Button поле курсора...

2
Заблокирован
23.11.2017, 22:17 2
Перестают работать, потому что после клика мышки в какой-то Item фокус переводится на него, а в нём у тебя нет обработки клавиш, которые обрабатываются только с focus == true
1
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
29.11.2017, 18:37 3
jvf, Всё просто. В QML два возможных типа изменения значений - binding и js-style.
text: mtext - это Property Binding(связывание свойств), каждый раз как изменяется свойство mtext, будет изменяться и свойство text.
text1.text = "Key_D" - это изменение в JS коде. Данное изменение сбрасывает любые связывания, которые могут изменить данный объект.
Поэтому после прямого изменения text1.text в JS у вас соединение text1.text и mtext перестаёт работать.

A property with a binding is automatically updated as necessary. However, if the property is later assigned a static value from a JavaScript statement, the binding will be removed.
0
29.11.2017, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2017, 18:37
Помогаю со студенческими работами здесь

После нажатия клавиши, не обрабатывать другие клавиши
На форме по нажатию разных клавиш происходят разные вещи, но хочу реализовать паузу по нажатию...

Побуквенный вывод слова через цикл + ожидания нажатия клавиши (после нажатия очистка и установка курсора на )
строку) Masm32 (com -программа) вообщем столкнулся с проблемой. к примеру ввожу ' LSD49 $'...

После выхода обновлений перестают работать програмы
CollectionLog-2014.11.23-20.48.zip

После перезагрузки usb порты перестают работать
Добрый день! Windows 7 Максимальный х64, ноутбук asus k50ij. Уже 7 год работает :) После каждой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru