Название: Иммитация события pressed Отправлено: Vombat от Ноябрь 24, 2011, 16:19 Здравствуйте уважаемые форумчане.
Хочу попросить у вас помощи. Есть кнопка QPushButton num0. Также есть файл со стилями qss: Код: QPushButton { .... } Сделал следующее в файле .cpp: Код: MyWindow::MyWindow() Вообщем всё работает как надо. нажимаю на клавишу "ноль", срабатывает нажатие кнопки num0, точнее выполняются все те же действия что и при нажатии на мышкой на кнопку. Но изображение кнопки не меняется на состояние, то что описано в qss QPushButton:focus:pressed { .... }. Тоесть визуально не видно что копка нажимается. Подскажите пожалуйста как решить эту проблему. Название: Re: Иммитация события pressed Отправлено: kambala от Ноябрь 24, 2011, 16:33 хоткей на кнопку вешать надо так:
Код
Название: Re: Иммитация события pressed Отправлено: Alex Custov от Ноябрь 24, 2011, 17:17 Код
Название: Re: Иммитация события pressed Отправлено: Vombat от Ноябрь 24, 2011, 21:49 kambala
Цитировать хоткей на кнопку вешать надо так: Спасибо это сделало мою программу более компактной.Код C++ (Qt) ui.num0->setShortcut(QKeySequence(Qt::Key_0)); Alex Custov Цитировать Код Это не решает проблему, которая у меня возникла.C++ (Qt) connect(mykey, SIGNAL(triggered()), ui.num0, SLOT(animateClick())); Вообщем методом тыка, я пришел к решению задачи. Возможно это и не самый элегантный и правильный способ, но работает. Может кому то пригодится. Код: MyWindow::MyWindow() Этот способ работает, но если будут предложения по более корректному или правильному решению задачи, буду благодарен. Название: Re: Иммитация события pressed Отправлено: twp от Ноябрь 24, 2011, 22:49 ну есть еще один вариант - послать событие мыши кнопке через QCoreApplication::postEvent() но не уверен что это будет более правильный и понятный способ
Название: Re: Иммитация события pressed Отправлено: Bepec от Ноябрь 25, 2011, 07:06 Цитировать Alex Custov Цитировать Код C++ (Qt) connect(mykey, SIGNAL(triggered()), ui.num0, SLOT(animateClick())); Это не решает проблему, которая у меня возникла. Вообщем методом тыка, я пришел к решению задачи. Возможно это и не самый элегантный и правильный способ, но работает. Может кому то пригодится. Это решило бы твою задачу. Если не пробовал - то и не утверждай что не помогает. animateСlick имитирует нажатие кнопки пользователем (визуальное нажатие). Работает и функционирует в любых программах со стандартными кнопками :) НО. Решение с хоткеем мне нравится больше и оно проще :) Название: Re: Иммитация события pressed Отправлено: Vombat от Ноябрь 25, 2011, 13:15 Alex Custov Так в том то и дело что я попробовал перед тем как написать.
И кроме того animateClick(), не имеет отношения к визуальному нажатию (точнее к обычным кнопкам может и имеет, но у меня кнопки с stylesheet). Это обычное нажатие click но с задержкой указаной в милисекундах. Вот ссылка на документацию. http://doc.qt.nokia.com/4.7/qabstractbutton.html#animateClick И цель задачи была имитировать визуальное нажатие кнопки, при нажатии на клавишу назначенную этой кнопке. (визуальное оформление сделано в qss файле). Название: Re: Иммитация события pressed Отправлено: Bepec от Ноябрь 25, 2011, 13:25 оффтоп:
Если тебе не говорит слово Animated, то увы. По описанию выполняется АНИМИРОВАННОЕ нажатие кнопки. по теме: Если у тебя StyleSheet с фокусом (в 1 посте у тя на кнопке должен быть фокус и нажатие одновременно), то ты сам себе проблему нашел. Убираешь focus: и все заработает даже с анимайтедем. Но - решение с шоткаром лучше :) PS английский надо не просто учить, но еще и понимать что написано. Название: Re: Иммитация события pressed Отправлено: Vombat от Ноябрь 25, 2011, 14:30 Bepec
По правде сказать, может там и есть момент нажитой проблемы, но вначале я пробовал QPushButton:pressed вместо QPushButton:focus:pressed. Да и вообще разные варианты с clicked и с animateClick. В итоге от того что ничего не получалось, решил задать вопрос на форуме. Пока что, по крайней мере у меня, только этот вариант заработал. Но конечно я не исключаю что есть более грамотные решения. Я всем благодарен за помощь в решении задачи и за информацию. Вопрос не по теме. Решил немного расширить возможность программы и мне потребовалось на одну кнопку вешать две клавиши. Как вторую прикрутить не подскажете? Если использовать setShortcut то первая клавиша перестаёт работать. Название: Re: Иммитация события pressed Отправлено: Bepec от Ноябрь 25, 2011, 14:40 Мм... в стандартном классе QPushButton возможен только 1 шоткар :) Если не переопределять класс, то только ловить нажатие на форме ручками.
|