Hello Qt users,

I apologize in advance if the answer was already given somewhere. I did some research on many forums and tutorials, but it seemed that I could only find partial answers to my question, so as I am a true beginner in Qt I thought asking real humans could be a good option...

So I would like to create a simple image viewer, but with some specific image constraints and some specific features:

1) image constraints:
_ suited for satellite images (mainly tiff format) with possibly massive size (up to several giga-pixels)
_ always displayed as gray-scale images, but with any pixel type and depth (among uint8 uint16, int16, uint32, int32, possibly float32 and float64)
_ if image contains several bands, just interpret them as a stack of gray-scale images (and for eg. read only one band), never RGB or colored image.
-> note : the process of reading properly the pixel data from tiff images should to be handled beforehand by gdal library

2) viewer features:
_ basic "interactive" view using mouse (pan, scroll) with decent execution speed !
_ possibility to adjust brightness/contrast (for e.g. with sliders)
_ on-the-fly reading of pixel coordinates (given in "native" image units in case of pan/zoom) and "native" image pixel value. By "native" I mean in the range of original image data (ex: 10,000 x 10,000 pixels with gray-scale in [0;65535] even if the image is displayed with a size of 500 x 500 pixels and gray-scale in [0;255] for example).
An good example of what I would like to do is the interactive image viewer in QGIS program.

Correct me if I am wrong but it looks like I will have to handle at least 2 versions of my image in parallel, I mean:
1) an original image (or close to it) with full resolution in pixels and all original pixel values
2) a transformed image for display purpose, with reduced size and values transformed into gray-scale
Then I imagine I have to make some conversions between the 2 images, like convert the mouse display coordinates into native image coordinates, as well as convert native gray-scale values into a convenient scale for display ([0;255]?)

So I would appreciate some general advice to create this viewer, like maybe :
_ which key class(es) should I use (QImage?QPixmap?both?others?) and maybe how they are connected/nested ?
_ maybe which key functions (to read the mouse coordinates) are vital to do the job ?
_ how to avoid some unnecessary copy of image data, especially if the image is huge (several GBytes) ?
_ how to handle properly gray-scale values of any numerical type (int8/uint8 to int32/uint32) ? For eg. QImage::Format seems way too complicated for that purpose and never really matches what I want (i.e. only gray levels, not artistic combination of colors)

I will appreciate any comment/suggestion/link towards something similar that I missed...
So thanks a lot for you answers !