Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
[Решено]Qt QTimer+KeqPressEvent sk9g45OEM
AGevork
Добавлено 23.05.2014 18:30 Редактировалось 26.05.2014 00:48
0
Сообщение: 1
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Здравствуйте.
Пишу приложение на QT c использование аппаратных кнопок. Которые сконфигурированы так :
Код

{
.code = Key_0,
.gpio = AT91_PIN_PCХХ,
.active_low = 1,
.desc = "Key_0",
.wakeup = 0,
.debounce_interval = 40,
},

Все работает нормально кнопка отзывается как в eventtest так и в моей программе на Qt .


Но проблема такова пытаюсь запустить таймер с помощью этой кнопки. По событию/сигналу таймера timeout() должен срабатывать SLOT (часы на label должны тикать ежесекундно), но при нажатии на кнопку появляется время и не "тикает" хотя должно тикать непрерывно пока я не остановлю таймер! Если тоже самое проделать не с помощью кнопки, а в конструкторе класса MainWindow, то все работает. Т.е. получается что при работе с keypressevent выполнение слота по сигналу делается только 1 раз.

Тоже самое происходит с UART при поступлении данных на порт ....

На компьютере с desktop linux на windiws все работает корректно часы тикают непрерывно после нажатия кнопки, а вот на плате чет не хочет. В чем может быть загвоздка?

Исходный код тестовой программы :
mainwindow.h
Код

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include <QTime>
#include <QKeyEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
QTimer *timer;
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

protected:
void keyPressEvent(QKeyEvent *event);

private slots:

void s_OnTimer();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H



mainwindow.cpp
Код

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

timer = new QTimer;
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(s_OnTimer()));

}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent* event)
{
switch(event->key())
{
case Qt::Key_0:
timer->start(1000);
break;

case Qt::Key_Alt:
timer->stop();
break;
}
}
void MainWindow::s_OnTimer()
{

ui->label_3->setText(QTime::currentTime().toString());
}
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 24.05.2014 11:06 Сообщение: 2
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
судя по хидеру, у вас qt5.x - мне на 4.8.1 это даже не скомпилировать..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 24.05.2014 11:09 Сообщение: 3
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Нет у меня 4.8.5 cобрано в buildroot2014.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 24.05.2014 12:33 Сообщение: 4
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Нет у меня 4.8.5 cобрано в buildroot2014.

понятно, значит в моей сборке выключена поддержка "ui", т.к. таких хидеров нет и линкер грязно ругается..
я практически ничего в qt не смыслю, могу предположить, что у вас кнопка недоопределена или надо организовать "рефреш" существующей формы, т.к. получается одноразовая работа по выводу кнопки с текстом.. для теста выведите в этой же форме текстовое поле с временем (без кнопки)..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 24.05.2014 13:41 Сообщение: 5
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
В том то все и дело что без кнопки таймер работает нормально.
А если выводить просто на label какую то надпись по нажатию кнопки то оно работает.
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 24.05.2014 23:48 Сообщение: 6
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Пробовал сделать тоже самое только через
Код

QShortcut *myShort = new QShortcut(QKeySequence(tr("0")), this);

Но происходит тоже самое ....
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 25.05.2014 23:10 Редактировалось 25.05.2014 23:18 Сообщение: 7
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Всем спс за внимание! Оказывается ошибка была просто в невнимательности (она меня губит) просто надо было добавить:
Код

export QWS_KEYBOARD="LinuxInput:/dev/input/eventX"

так что 3 недели драгоценного времени заключались в столь глупой ошибке.

P.S. не знаю как поставить статус темы решено...
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.05.2014 23:44 Сообщение: 8
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Всем спс за внимание! Оказывается ошибка была просто в невнимательности (она меня губит) просто надо было добавить:

так что 3 недели драгоценного времени заключались в столь глупой ошибке.

спасибо что поделились знанием - сочувствую за убитые 3 недели..

Цитата
P.S. не знаю как поставить статус темы решено...

это несложно, если вы владелец темы:
в первом сообщение нажимаете "полное редактирование" и там увидите возможность изменить заголовок

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux