
If the slot is called to turn on the option, we tell the scroll area to resize its child widget with the QScrollArea::setWidgetResizable() function. The fitToWindow() slot is called each time the user toggled the Fit to Window option. ScrollArea - >setWidgetResizable(fitToWindow) In this particular example an information message with an OK button (the default) is sufficient, since the message is part of a normal operation.īool fitToWindow = fitToWindowAct - >isChecked() QMessageBox provides a range of different messages arranged along two axes: severity (question, information, warning and critical) and complexity (the number of necessary response buttons). As with QFileDialog the easiest way to create a QMessageBox is to use its static convenience functions. The QMessageBox class provides a modal dialog with a short message, an icon, and some buttons. If this returns a null image, indicating that the file is not an image file, we use a QMessageBox to alert the user. We then load the image using QImageReader::read(). For files in JPEG format, this ensures that portrait mode images of digital cameras are shown correctly by applying the appropriate orientation read from the EXIF meta data stored in the image file. In the loadFile() function, we instantiate a QImageReader and enable automatic transformations by calling QImageReader::setAutoTransform(). arg( QDir ::toNativeSeparators(fileName), reader. QMessageBox ::information( this, QGuiApplication ::applicationDisplayName() , The function loadFile() is used to load the image.īool ImageViewer ::loadFile( const QString &fileName) We show the file dialog until a valid file name is entered or the user cancels. We compile a list of mime types for use as a filter by querying QImageReader for the available mime type names. In the open() slot, we show a file dialog to the user. exec() = QDialog ::Accepted & & !loadFile(dialog. InitializeImageFileDialog(dialog, QFileDialog ::AcceptOpen) QFileDialog dialog( this, tr( "Open File"))

If (acceptMode = QFileDialog ::AcceptSave) setMimeTypeFilters(mimeTypeFilters) ĭialog.

? QImageReader ::supportedMimeTypes() : QImageWriter ::supportedMimeTypes() įor ( const QByteArray &mimeTypeName : supportedMimeTypes)ĭialog. last()) Ĭonst QByteArrayList supportedMimeTypes = acceptMode = QFileDialog ::AcceptOpen isEmpty() ? QDir ::currentPath() : picturesLocations. Static void initializeImageFileDialog( QFileDialog &dialog, QFileDialog ::AcceptMode acceptMode)Ĭonst QStringList picturesLocations = QStandardPaths ::standardLocations( QStandardPaths ::PicturesLocation) ĭialog. At the end we create the associated actions and menus, and customize the ImageViewer's appearance. We make imageLabel the scroll area's child widget, and we make scrollArea the central widget of the QMainWindow. If we omitted to set the imageLabel's scaledContents property, zooming in would enlarge the QLabel, but leave the pixmap at its original size, exposing the QLabel's background. We ensure that the label will scale its contents to fill all available space, to enable the image to scale properly when zooming. Otherwise, the default size polizy ( preferred) will make scroll bars appear when the scroll area becomes smaller than the label's minimum size hint. We set imageLabel's size policy to ignored, making the users able to scale the image to whatever size they want when the Fit to Window option is turned on. In the constructor we first create the label and the scroll area. Resize( QGuiApplication ::primaryScreen() - >availableSize() * 3 / 5) ScrollArea - >setBackgroundRole( QPalette ::Dark) ImageLabel - >setSizePolicy( QSizePolicy ::Ignored, QSizePolicy ::Ignored) ImageLabel - >setBackgroundRole( QPalette ::Base) : QMainWindow(parent), imageLabel( new QLabel) ImageViewer ::ImageViewer( QWidget *parent) In turn, scaleImage() uses adjustScrollBar() to preserve the focal point after scaling an image. The zoom slots use scaleImage() to perform the zooming.
#IMAGEVIEWER UPDATE UPDATE#
We use the updateActions() function to update the menu entries when a new image is loaded, or when the Fit to Window option is toggled. We use createActions() and createMenus() when constructing the ImageViewer widget. In addition we create four private functions. We reimplement the constructor, and create several private slots to facilitate the menu entries.

The ImageViewer class inherits from QMainWindow. #if defined(QT_PRINTSUPPORT_LIB) & QT_CONFIG(printer) QPrinter printer Void adjustScrollBar( QScrollBar *scrollBar, double factor)
