Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[QT] Problem z QImage

Ostatnio zmodyfikowano 2015-03-17 19:58
Autor Wiadomość
killermannnnn
Temat założony przez niniejszego użytkownika
[QT] Problem z QImage
» 2015-03-17 17:45:03
Mam program, który powinien rysować na ekranie obraz i zmieniac jego jasnośc przy naciskaniu strzałek w góre lub w dół. Problem w tym, że nie ładuje sie żaden obraz mimo, że plik o podanej nazwie jest w folderze projektu. Co może być błędem ?

main.cpp :
C/C++
#include "mainwindow.h"
#include <QApplication>
#include "imagewidget.h"

int main( int argc, char * argv[] )
{
    QApplication a( argc, argv );
   
    ImageWidget iw;
    iw.show();
   
    return a.exec();
}

imagewidget.h:
C/C++
#ifndef IMAGEWIDGET
#define IMAGEWIDGET

#include <QImage>
#include <QWidget>

class ImageWidget
    : public QWidget
{
    QImage image;
    QImage resultImage;
    int bright;
    void processImage();
   
protected:
    virtual void keyPressEvent( QKeyEvent * );
    virtual void paintEvent( QPaintEvent * );
   
public:
    ImageWidget( QWidget * parent = 0 );
};

#endif // IMAGEWIDGET

imageWidget.cpp:
C/C++
#include "imagewidget.h"
#include <QPainter>
#include <QKeyEvent>

using namespace std;

ImageWidget::ImageWidget( QWidget * parent )
    : QWidget( parent )
{
    image = QImage( "xxx.png" );
    resultImage = image;
    bright = 0;
}

void ImageWidget::paintEvent( QPaintEvent * )
{
    QPainter painter( this );
    painter.drawImage( 0, 0, resultImage );
}

void ImageWidget::processImage()
{
    for( int y = 0; y < image.height(); y++ )
    {
        QRgb * pd =( QRgb * ) resultImage.scanLine( y );
        QRgb * ps =( QRgb * ) image.scanLine( y );
       
        for( int x = 0; x < image.width(); x++ )
        {
            int r = max( 0, min( 255, qRed( ps[ x ] ) + bright ) );
            int g = max( 0, min( 255, qGreen( ps[ x ] ) + bright ) );
            int b = max( 0, min( 255, qBlue( ps[ x ] ) + bright ) );
            pd[ x ] = qRgba( r, g, b, qAlpha( ps[ x ] ) );
        }
    }
}

void ImageWidget::keyPressEvent( QKeyEvent * e )
{
    if( e->key() == Qt::Key_Up ) bright += 1;
   
    if( e->key() == Qt::Key_Down ) bright -= 1;
   
    processImage();
    update();
}
P-128634
kubawal
» 2015-03-17 19:58:24
Generalnie oficjalny tutorial dla wszystkich składowych z Qt używa wskaźników i dynamicznej alokacji, więc lepiej sie tego trzymać.

BTW zgubiłeś Q_OBJECT
P-128648
« 1 »
  Strona 1 z 1