Получить данные из терминала чтения данных в графический интерфейс (QtCreator)

Мне нужен небольшой графический интерфейс, показывающий данные из читателя данных ниже. Скажем, у меня есть 10 сообщений, отображаемых считывателем данных в консоли, все, что мне нужно, это в графическом интерфейсе, он должен отображать 1-е сообщение в течение полсекунды, а второе и так далее … в Textbrowser QtCreator.

Любая помощь приветствуется.

DDS_DomainParticipant_get_current_time (participant, &ts1);

status = Chat_ChatMessageDataReader_take(
chatAdmin,
msgSeq,
infoSeq,
DDS_LENGTH_UNLIMITED,
DDS_ANY_SAMPLE_STATE,
DDS_ANY_VIEW_STATE,
DDS_ALIVE_INSTANCE_STATE );

checkStatus(status, "Chat_NamedMessageDataReader_take");

for (i = 0; i < msgSeq->_length; i++)
{
DDS_DomainParticipant_get_current_time (participant, &ts2);
Chat_ChatMessage *msg = &(msgSeq->_buffer[i]);
printf ("%d: %s t1.secs %d t1.ns %u t2.secs %d t2.ns %u \n", msg->userID, msg->content, ts1.sec, ts1.nanosec,ts2.sec, ts2.nanosec);
fflush(stdout);
}

Выход:
Панель сообщений открылась: отправьте сообщение ChatMessage с userID = -1, чтобы закрыть его ….

    1: Hi there, I will send you 20 more messages. t1.secs 1465476565 t1.ns 676311347 t2.secs 1465476565 t2.ns 676395551
1: 1 t1.secs 1465476566 t1.ns 676569175 t2.secs 1465476566 t2.ns 676596400
1: 2 t1.secs 1465476567 t1.ns 677616392 t2.secs 1465476567 t2.ns 677648204
1: 3 t1.secs 1465476568 t1.ns 678910684 t2.secs 1465476568 t2.ns 678940815
1: 4 t1.secs 1465476569 t1.ns 680225024 t2.secs 1465476569 t2.ns 680255376
1: 5 t1.secs 1465476570 t1.ns 681507684 t2.secs 1465476570 t2.ns 681534887
1: 6 t1.secs 1465476571 t1.ns 682657681 t2.secs 1465476571 t2.ns 682689735
1: 7 t1.secs 1465476572 t1.ns 683901346 t2.secs 1465476572 t2.ns 683931532
1: 8 t1.secs 1465476573 t1.ns 684895076 t2.secs 1465476573 t2.ns 684926328
1: 9 t1.secs 1465476574 t1.ns 686201827 t2.secs 1465476574 t2.ns 686231445
1: 10 t1.secs 1465476575 t1.ns 687286401 t2.secs 1465476575 t2.ns 687318820
1: 11 t1.secs 1465476576 t1.ns 687569194 t2.secs 1465476576 t2.ns 687602357
1: 12 t1.secs 1465476577 t1.ns 688870441 t2.secs 1465476577 t2.ns 688900707
1: 13 t1.secs 1465476578 t1.ns 690184430 t2.secs 1465476578 t2.ns 690213984
1: 14 t1.secs 1465476579 t1.ns 691483124 t2.secs 1465476579 t2.ns 691517976
1: 15 t1.secs 1465476580 t1.ns 692274389 t2.secs 1465476580 t2.ns 692299778
1: 16 t1.secs 1465476581 t1.ns 693601908 t2.secs 1465476581 t2.ns 693667232
1: 17 t1.secs 1465476582 t1.ns 694371847 t2.secs 1465476582 t2.ns 694395932
1: 18 t1.secs 1465476583 t1.ns 695229750 t2.secs 1465476583 t2.ns 695421352
1: 19 t1.secs 1465476584 t1.ns 696229812 t2.secs 1465476584 t2.ns 696261942
1: 20 t1.secs 1465476585 t1.ns 696390252 t2.secs 1465476585 t2.ns 696417861

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

Из текстового файла:

void MainWindow::on_pushButton_clicked()
{
QFile file("/home/akhil/test.txt");
if(!file.open(QIODevice::ReadOnly))
QMessageBox::information(0,"info",file.errorString());

QTextStream in(&file);
ui->textBrowser->setText(in.readAll());

}

2

Решение

Грубый путь

Хорошо, вот очень грубый способ сделать то, что вы хотите — полезный для быстрого теста:

void MainWindow::on_pushButton_clicked()
{
QFile file("/home/akhil/test.txt");
if(!file.open(QIODevice::ReadOnly))
QMessageBox::information(0,"info",file.errorString());

QTextStream in(&file);
while (!in.atEnd())
{
ui->textBrowser->setText(in.readLine()); // read one line and display it
QThread::msleep(500); // Pause for 500ms: #include <QThread>
}
}

Правильный путь

Однако лучшим способом было бы открыть QTextStream как объект-член, тогда вы можете использовать QTimer:

создайте таймер и подключите его:

QTimer *m_timer = new QTimer(this);
connect(m_timer &QTimer::timeout(), this, &MainWindow::onTimer());

запустить таймер (возможно, в вашем on_pushButton_clicked() функция):

m_timer.start(500);

На слоте таймера:

MainWindow::onTimer()
{
ui->textBrowser->setText(m_in.readLine()); // read one line and (in is now member variable 'm_in'
if (m_in.atEnd())
{
m_timer.stop(); // stop the timer we have reached the end.
// Close the io stream etc...
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]