Действительно, есть более быстрый способ: создать массив неподписанных символов и напрямую изменить значения пикселей.Затем создайте QImage из этого массива.Вызов setPixel () очень дорогой.
unsigned char* buffer_;
buffer_ = new unsigned char[4 * w * h];
//...
for(int i = 0; i < h; i++){
for(int j = 0; j < w; j++){
unsigned char r, g, b;
//...
buffer_[4 * (i * w + j) ] = r;
buffer_[4 * (i * w + j) + 1] = g;
buffer_[4 * (i * w + j) + 2] = b;
}
}
Это для QImage :: format_RGB32, и ваш paintEvent () будет выглядеть примерно так:
void paintEvent(QPaintEvent* event){
//...
QImage image(buffer_, w, h, QImage::Format_RGB32);
painter.drawImage(QPoint(0, 0), image);
}