我想在qt环境下写一个消息队列,用于存放QByteArray数据,帮我写一下
时间: 2024-03-03 22:49:16 浏览: 195
好的,以下是一个简单的消息队列类,可以用于存放 `QByteArray` 数据:
```cpp
#include <QtCore>
class MessageQueue : public QObject
{
Q_OBJECT
public:
explicit MessageQueue(QObject *parent = nullptr)
: QObject(parent)
{
}
void enqueue(const QByteArray &message)
{
QMutexLocker locker(&m_mutex);
m_messages.enqueue(message);
emit messageEnqueued();
}
QByteArray dequeue()
{
QMutexLocker locker(&m_mutex);
if (m_messages.isEmpty()) {
return QByteArray();
}
return m_messages.dequeue();
}
signals:
void messageEnqueued();
private:
QMutex m_mutex;
QQueue<QByteArray> m_messages;
};
```
使用方法示例:
```cpp
MessageQueue messageQueue;
// connect to the messageEnqueued signal
connect(&messageQueue, &MessageQueue::messageEnqueued, []() {
qDebug() << "Message enqueued";
});
// enqueue a message
QByteArray message("Hello, world!");
messageQueue.enqueue(message);
// dequeue a message
QByteArray dequeuedMessage = messageQueue.dequeue();
if (!dequeuedMessage.isEmpty()) {
qDebug() << "Dequeued message:" << dequeuedMessage;
}
```
在这个例子中,我们创建了一个 `MessageQueue` 对象,调用 `enqueue()` 方法将消息添加到队列中,调用 `dequeue()` 方法从队列中取出消息。当有消息被添加到队列中时,将会发送 `messageEnqueued` 信号。
阅读全文