Я пытаюсь отобразить изображения с камеры CameraLink в QGraphicsView.
Я использую кольцевой буфер, который выполняет функции get () и set (), и два потока, которые потребляют или создают изображения в этом кольцевом буфере.
Эта часть работает, потому что у меня уже была успешная трансляция с использованием QWidget. Я хочу использовать QGraphicsView, потому что я хочу рисовать поверх этих входящих изображений
У меня есть класс отображения, который повышается до QGraphicsView, каждый раз, когда создается изображение, из потока потребителя передается сигнал для следующей функции:
void display::drawImage(ImageBW* image)
{
firstImage = image;
QRect rect;
rect.setHeight(1000);
rect.setWidth(2000);
QApplication::postEvent(this->viewport(),new QPaintEvent(rect));
}
Я переопределил painEvent класса QGraphicsview:
void display::paintEvent(QPaintEvent *event)
{
if(firstImage)
_drawImage();
event->setAccepted(true);
}
и функция рисования:
void display::_drawImage()
{
int w, h;
if(img)
{
delete img;
img = NULL;
}
w = firstImage->getSizeX();
h = firstImage->getSizeY();
unsigned char * udata = (unsigned char *)firstImage ->getData();
img = new QImage(udata,w, h,QImage::Format_Grayscale8);
pix_img = QPixmap::fromImage(*img);
scene->clear();
scene->addPixmap(pix_img);
scene->setSceneRect(pix_img.rect());
scene->update();
update(); // I have tried here also setScene(scene)
}
В приведенном выше коде firstImage является переменной ImageBW *. ImageBW - это место, где хранятся данные изображения с камеры.
Я также пытался с помощью функции QGraphicsItem и addItem (), но у меня нет изображения.
'scene' инициализируется у производителя этого класса, а также 'setScene (scene);' команда есть.
Программа зависает через некоторое время, так что, вероятно, это означает, что этот код создает стекопотока.
Пожалуйста, я перепробовал все, что мог, любая помощь будет принята с благодарностью.
Заранее спасибо