2014-01-04 6 views
-1

У меня есть некоторые данные, поступающие через последовательное соединение в мое приложение C++. Теперь я не хочу создавать простой графический интерфейс с полосковой диаграммой этих данных и несколькими кнопками. (Что-то вроде частоты обновления 10 Гц)Простой стриптиз в C++/Qt

Кнопки на самом деле не проблема. Но я не нашел Qt-плагина для ленточных диаграмм. Есть ли какая-либо другая библиотека, которую я мог бы вызвать из C++. Должно быть много, учитывая, что это довольно простая и общая задача.

ОС: Ubuntu

CC: г ++

+0

Ehr, Why downvote? Это ужасно вопрос? Я не думаю, что я единственный, у кого есть эта проблема ... –

+0

google может помочь – manuell

ответ

1

Посмотрите на следующие виджеты:

Также карты может быть хорошим выбором (легко реализовать с помощью QML)

http://blog.qt.digia.com/blog/2013/11/07/qt-data-visualization-technology-preview-and-charts-1-3-1-release/

или реализуют один за себя с

http://qt-project.org/doc/qt-4.8/graphicsview-diagramscene.html

+0

Большое спасибо. Я выбираю qcustomplot. Простая весовая диаграмма и делает то, что мне нужно, чтобы сделать –

1

Это не обязательно отдельную библиотеку на ее но для таких прецедентов принято комбинировать такие QtSerialPort и Qwt.

Основным принципом является использование асинхронного считывания. Вы можете запустить таймер внутри с фиксированным периодом, а затем вы можете нарисовать следующую часть «полосковой диаграммы» в каждом указанном вами интервале.

Вы можете сделать это до тех пор, пока не будет выполнено определенное условие, например, нет доступных данных и т. Д. Вы не упомянули, используете ли вы QtSerialPort, но это почти тангенциально, хотя, вероятно, имеет смысл использовать его в проекте Qt.

Вы можете написать что-то вроде кода ниже в QtSerialPort для нашего примера чтения асинхронных сообщений. Идея заключается в том, что вы периодически добавляете свой графический виджет.

SerialPortReader::SerialPortReader(QSerialPort *serialPort, QObject *parent) 
    : QObject(parent) 
    , m_serialPort(serialPort) 
    , m_standardOutput(stdout) 
{ 
    connect(m_serialPort, SIGNAL(readyRead()), SLOT(handleReadyRead())); 
    connect(m_serialPort, SIGNAL(error(QSerialPort::SerialPortError)), SLOT(handleError(QSerialPort::SerialPortError))); 
    connect(&m_timer, SIGNAL(timeout()), SLOT(handleTimeout())); 

    m_timer.start(5000); 
} 

SerialPortReader::~SerialPortReader() 
{ 
} 

void SerialPortReader::handleReadyRead() 
{ 
    m_readData.append(m_serialPort->readAll()); 
    // *** This will display the next part of the strip chart *** 
    // *** Optionally make the use of a plotting library here as 'Qwt' *** 
    myWidget.append('='); 

    if (!m_timer.isActive()) 
     m_timer.start(5000); 
} 

void SerialPortReader::handleTimeout() 
{ 
    if (m_readData.isEmpty()) { 
     m_standardOutput << QObject::tr("No data was currently available for reading from port %1").arg(m_serialPort->portName()) << endl; 
    } else { 
     m_standardOutput << QObject::tr("Data successfully received from port %1").arg(m_serialPort->portName()) << endl; 
     m_standardOutput << m_readData << endl; 
    } 

    QCoreApplication::quit(); 
} 

void SerialPortReader::handleError(QSerialPort::SerialPortError serialPortError) 
{ 
    if (serialPortError == QSerialPort::ReadError) { 
     m_standardOutput << QObject::tr("An I/O error occurred while reading the data from port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl; 
     QCoreApplication::exit(1); 
    } 
} 
+0

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

+0

@magu_: конечно, добро пожаловать. :-) – lpapp

+0

@magu_: странно, что вы выбрали ответ только для ссылок. ;-) – lpapp