diff options
Diffstat (limited to 'src/qcam')
-rw-r--r-- | src/qcam/main_window.cpp | 1 | ||||
-rw-r--r-- | src/qcam/viewfinder.cpp | 22 | ||||
-rw-r--r-- | src/qcam/viewfinder.h | 8 |
3 files changed, 21 insertions, 10 deletions
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp index 1d9c756f..df51fa88 100644 --- a/src/qcam/main_window.cpp +++ b/src/qcam/main_window.cpp @@ -33,7 +33,6 @@ MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options) viewfinder_ = new ViewFinder(this); setCentralWidget(viewfinder_); - viewfinder_->setFixedSize(500, 500); adjustSize(); ret = openCamera(cm); diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp index 98a8ab68..6de284d1 100644 --- a/src/qcam/viewfinder.cpp +++ b/src/qcam/viewfinder.cpp @@ -6,13 +6,13 @@ */ #include <QImage> -#include <QPixmap> +#include <QPainter> #include "format_converter.h" #include "viewfinder.h" ViewFinder::ViewFinder(QWidget *parent) - : QLabel(parent), format_(0), width_(0), height_(0), image_(nullptr) + : QWidget(parent), format_(0), width_(0), height_(0), image_(nullptr) { } @@ -24,9 +24,7 @@ ViewFinder::~ViewFinder() void ViewFinder::display(const unsigned char *raw, size_t size) { converter_.convert(raw, size, image_); - - QPixmap pixmap = QPixmap::fromImage(*image_); - setPixmap(pixmap); + update(); } int ViewFinder::setFormat(unsigned int format, unsigned int width, @@ -42,10 +40,20 @@ int ViewFinder::setFormat(unsigned int format, unsigned int width, width_ = width; height_ = height; - setFixedSize(width, height); - delete image_; image_ = new QImage(width, height, QImage::Format_RGB32); + updateGeometry(); return 0; } + +void ViewFinder::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.drawImage(rect(), *image_, image_->rect()); +} + +QSize ViewFinder::sizeHint() const +{ + return image_ ? image_->size() : QSize(640, 480); +} diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h index 33bdb146..ef5fd45b 100644 --- a/src/qcam/viewfinder.h +++ b/src/qcam/viewfinder.h @@ -7,13 +7,13 @@ #ifndef __QCAM_VIEWFINDER_H__ #define __QCAM_VIEWFINDER_H__ -#include <QLabel> +#include <QWidget> #include "format_converter.h" class QImage; -class ViewFinder : public QLabel +class ViewFinder : public QWidget { public: ViewFinder(QWidget *parent); @@ -23,6 +23,10 @@ public: unsigned int height); void display(const unsigned char *rgb, size_t size); +protected: + void paintEvent(QPaintEvent *) override; + QSize sizeHint() const override; + private: unsigned int format_; unsigned int width_; |