Вот класс:
class GraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
...
void setCurrentFrame(const QPixmap &frame, const QByteArray &data);
...
protected:
// mouse events
...
private:
QPixmap currentFrame;
QByteArray currentFrameData;
...
}
setCurrentFrame
обновляет фрейм и сохраняет последний фрейм и байтовый массив в приватные члены:
void GraphicsScene::setCurrentFrame(const QPixmap &frame, const QByteArray &frameData)
{
clear();
addPixmap(frame);
currentFrame = frame;
currentFrameData = QByteArray(frameData);
qDebug() << currentFrameData.toHex(); // this line works as expected
}
В приведенном выше коде строка qDebug()
печатает байтовый массив, как и ожидалось. Теперь посмотрите на этот код:
void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
qDebug() << "GraphicsScene::mouseReleaseEvent(): frame" << currentFrameData.size(); // works! size is printed
for (int i = 0; i < currentFrameData.size(); ++i)
qDebug() << currentFrameData.toHex().at(i); // works! each character is printed
qDebug() << currentFrameData.toHex(); // does not work! no content of currentFrameData
...
emit clicked(mouseEvent.pos(), currentFrameData); // I need this signal to send me currentFrameData
...
}
Я не могу получить currentFrameData
контент. Мне нужно использовать currentFrameData
в слоте другого класса, но он ничего не показывает даже в этом GraphicsScene
самом классе. Я даже не знал, что написать в названии вопроса. В чем здесь проблема?