Есть программа, которая в консольном режиме считывает байты приходящие на com-порт() и выводить printf'ом на экран, при нажатии ESC программа завершается. Всё работает как надо.
Попытался сделать аналогичную штуку в Qt 4.5 (просто убрал принтфы и заменил на "ui->myLcd->display(int( R[0] ));", fp - file descriptor последовательного порта). Всё интересное в цикле while :
void myWid::on_myButton_clicked()
{
int i = 0;
char R[5] = {0};
struct termios tp1;
struct termios tp2;
tcgetattr( 0, &tp1);
tp2 = tp1;
tp2.c_iflag&=~ICRNL;
tp2.c_lflag&=~ICANON;
tp2.c_lflag&=~ECHO;
tp2.c_cc[VMIN ]=1;
tp2.c_cc[VTIME]=0;
tp2.c_cc[VINTR]=0xFF;
tp2.c_cc[VSUSP]=0xFF;
tp2.c_cc[VQUIT]=0xFF;
tcsetattr( 0, TCSANOW, &tp2);
fd_set set0, set;
FD_ZERO( &set);
FD_SET( fp, &set);
FD_SET( 0, &set);
set0 = set;
while(1)
{
if ( select( fp+1, &set, NULL, NULL, NULL ) > 0)
{
if( FD_ISSET( fp, &set))
{
i = read( fp, R, 1);
ui->myLcd->display(int( R[0] ));
//break;
}
if( FD_ISSET( 0, &set) )
{
i = read( 0, R, 1);
if( R[0] == 27){ break;}
}
}
set = set0;
}
tcflush( fp, TCIOFLUSH);
tcsetattr( 0, TCSANOW, &tp1);
}
Байты с ком-порта успешно принимаются и отображаются в QLCDNumber, а с клавиатуры ничего не принимается с том числе и ESC
Можно ли вообще читать клавиатуру read'ом в Qt 4.5 ? Что я делаю не так?
Ну и проблема номер два: Байты то считываются, но из них всех на LCDNumber отображается только последний, после выхода из цикла.
Как сделать так, чтобы показания QLCDNumber менялась сразу при получении байта, до завершения цикла? Пытался добавлять "ui->myLcd->update();", не получилось