Qt图像查看器示例

该示例展示了如何使用Qt库创建一个图像查看器,支持缩放、打印及菜单功能。通过QLabel和QScrollArea实现图像显示,利用缩放能力调整图像大小,并提供打印图像的选项。用户可以通过菜单进行图像操作,包括放大、缩小、原始大小显示和全屏显示。图像查看器类详细解释了构造、加载图像和菜单更新的过程。
摘要由CSDN通过智能技术生成

该示例演示如何组合和显示图像。

通常用于显示文本,但它也可以显示图像。提供围绕另一个小组件的滚动视图。如果子构件超过框架的大小, 会自动提供滚动条。

该示例演示了如何使用 缩放其内容 () 的能力和 自动调整其内容大小的能力 () 来实现缩放和缩放功能。此外,该示例还演示如何使用 打印图像。

图像查看器示例的屏幕截图

使用图像查看器应用程序,用户可以查看他们选择的图像。该菜单使用户可以:

  • - 打开图像文件
  • - 打印图像
  • - 退出应用程序

加载图像后,菜单允许用户:

  • - 将图像放大 25%
  • - 将图像缩小 25%
  • - 以原始大小显示图像
  • - 拉伸图像以占据整个窗口

此外,该菜单还为用户提供了有关图像查看器示例以及一般Qt的信息。

图像查看器类定义

<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#ffff55">class</span> <span style="color:#4f9d08">ImageViewer</span> <span style="color:#ffffff">:</span> <span style="color:#ffff55">public</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qmainwindow.html" href="https://doc.qt.io/qt-6/qmainwindow.html"><span style="color:#21be2b">QMainWindow</span></a>
<span style="color:#ffffff">{</span><span style="color:#ffffff">
    Q_OBJECT

</span><span style="color:#ffff55">public</span><span style="color:#ffffff">:</span>
    <span style="color:#4f9d08">ImageViewer</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">parent </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">nullptr</span><span style="color:#ffffff">);</span>
    <span style="color:#ffff55">bool</span><span style="color:#ffffff"> loadFile</span><span style="color:#ffffff">(</span><span style="color:#ffff55">const</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qstring.html" href="https://doc.qt.io/qt-6/qstring.html"><span style="color:#21be2b">QString</span></a> <span style="color:#ffffff">&</span><span style="color:#ffffff">);</span>

<span style="color:#ffff55">private</span> <span style="color:#ffffff">slots</span><span style="color:#ffffff">:</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> open</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> saveAs</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span> <span style="color:#ffff55">print</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> copy</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> paste</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> zoomIn</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> zoomOut</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> normalSize</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> fitToWindow</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> about</span><span style="color:#ffffff">();</span>

<span style="color:#ffff55">private</span><span style="color:#ffffff">:</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> createActions</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> createMenus</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> updateActions</span><span style="color:#ffffff">();</span>
    <span style="color:#ffff55">bool</span><span style="color:#ffffff"> saveFile</span><span style="color:#ffffff">(</span><span style="color:#ffff55">const</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qstring.html" href="https://doc.qt.io/qt-6/qstring.html"><span style="color:#21be2b">QString</span></a> <span style="color:#ffffff">&</span><span style="color:#ffffff">fileName</span><span style="color:#ffffff">);</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> setImage</span><span style="color:#ffffff">(</span><span style="color:#ffff55">const</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qimage.html" href="https://doc.qt.io/qt-6/qimage.html"><span style="color:#21be2b">QImage</span></a> <span style="color:#ffffff">&</span><span style="color:#ffffff">newImage</span><span style="color:#ffffff">);</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> scaleImage</span><span style="color:#ffffff">(</span><span style="color:#ffff55">double</span><span style="color:#ffffff"> factor</span><span style="color:#ffffff">);</span>
    <span style="color:#ffff55">void</span><span style="color:#ffffff"> adjustScrollBar</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qscrollbar.html" href="https://doc.qt.io/qt-6/qscrollbar.html"><span style="color:#21be2b">QScrollBar</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">scrollBar</span><span style="color:#ffffff">,</span> <span style="color:#ffff55">double</span><span style="color:#ffffff"> factor</span><span style="color:#ffffff">);</span>

    <a data-cke-saved-href="https://doc.qt.io/qt-6/qimage.html" href="https://doc.qt.io/qt-6/qimage.html"><span style="color:#21be2b">QImage</span></a><span style="color:#ffffff"> image</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qlabel.html" href="https://doc.qt.io/qt-6/qlabel.html"><span style="color:#21be2b">QLabel</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">imageLabel</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qscrollarea.html" href="https://doc.qt.io/qt-6/qscrollarea.html"><span style="color:#21be2b">QScrollArea</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">scrollArea</span><span style="color:#ffffff">;</span>
    <span style="color:#ffff55">double</span><span style="color:#ffffff"> scaleFactor </span><span style="color:#ffffff">=</span> <span style="color:#ff55ff">1</span><span style="color:#ffffff">;</span>

<span style="color:#55ffff">#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)</span>
    <span style="color:#4f9d08">QPrinter</span><span style="color:#ffffff"> printer</span><span style="color:#ffffff">;</span>
<span style="color:#55ffff">#endif</span>

    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">saveAsAct</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">printAct</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">copyAct</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">zoomInAct</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">zoomOutAct</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">normalSizeAct</span><span style="color:#ffffff">;</span>
    <a data-cke-saved-href="https://doc.qt.io/qt-6/qaction.html" href="https://doc.qt.io/qt-6/qaction.html"><span style="color:#21be2b">QAction</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">fitToWindowAct</span><span style="color:#ffffff">;</span>
<span style="color:#ffffff">};</span></span></span></span>

该类继承自 。我们重新实现构造函数,并创建几个专用插槽来方便菜单条目。此外,我们还创建了四个私有函数。ImageViewer

我们在构建小部件时使用和。我们使用该功能在加载新图像或切换选项时更新菜单条目。用于执行缩放的缩放槽。反过来,用于在缩放图像后保留焦点。createActions()createMenus()ImageViewerupdateActions()scaleImage()scaleImage()adjustScrollBar()

图像查看器类实现

<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#4f9d08">ImageViewer</span><span style="color:#ffffff">::</span><span style="color:#4f9d08">ImageViewer</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">parent</span><span style="color:#ffffff">)</span>
   <span style="color:#ffffff">:</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qmainwindow.html" href="https://doc.qt.io/qt-6/qmainwindow.html"><span style="color:#21be2b">QMainWindow</span></a><span style="color:#ffffff">(</span><span style="color:#ffffff">parent</span><span style="color:#ffffff">)</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> imageLabel</span><span style="color:#ffffff">(</span><span style="color:#ffff55">new</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qlabel.html" href="https://doc.qt.io/qt-6/qlabel.html"><span style="color:#21be2b">QLabel</span></a><span style="color:#ffffff">)</span>
   <span style="color:#ffffff">,</span><span style="color:#ffffff"> scrollArea</span><span style="color:#ffffff">(</span><span style="color:#ffff55">new</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qscrollarea.html" href="https://doc.qt.io/qt-6/qscrollarea.html"><span style="color:#21be2b">QScrollArea</span></a><span style="color:#ffffff">)</span>
<span style="color:#ffffff">{</span><span style="color:#ffffff">
    imageLabel</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">setBackgroundRole</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qpalette.html" href="https://doc.qt.io/qt-6/qpalette.html"><span style="color:#21be2b">QPalette</span></a><span style="color:#ffffff">::</span><span style="color:#4f9d08">Base</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
    imageLabel</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">setSizePolicy</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qsizepolicy.html" href="https://doc.qt.io/qt-6/qsizepolicy.html"><span style="color:#21be2b">QSizePolicy</span></a><span style="color:#ffffff">::</span><span style="color:#4f9d08">Ignored</span><span style="color:#ffffff">,</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qsizepolicy.html" href="https://doc.qt.io/qt-6/qsizepolicy.html"><span style="color:#21be2b">QSizePolicy</span></a><span style="color:#ffffff">::</span><span style="color:#4f9d08">Ignored</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
    imageLabel</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">setScaledContents</span><span style="color:#ffffff">(</span><span style="color:#ffff55">true</span><span style="color:#ffffff">);</span><span style="color:#ffffff">

    scrollArea</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">setBackgroundRole</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qpalette.html" href="https://doc.qt.io/qt-6/qpalette.html"><span style="color:#21be2b">QPalette</span></a><span style="color:#ffffff">::</span><span style="color:#4f9d08">Dark</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
    scrollArea</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">setWidget</span><span style="color:#ffffff">(</span><span style="color:#ffffff">imageLabel</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
    scrollArea</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">setVisible</span><span style="color:#ffffff">(</span><span style="color:#ffff55">false</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
    setCentralWidget</span><span style="color:#ffffff">(</span><span style="color:#ffffff">scrollArea</span><span style="color:#ffffff">);</span><span style="color:#ffffff">

    createActions</span><span style="color:#ffffff">();</span><span style="color:#ffffff">

    resize</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qguiapplication.html" href="https://doc.qt.io/qt-6/qguiapplication.html"><span style="color:#21be2b">QGuiApplication</span></a><span style="color:#ffffff">::</span><span style="color:#ffffff">primaryScreen</span><span style="color:#ffffff">()</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">availableSize</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">*</span> <span style="color:#ff55ff">3</span> <span style="color:#ffffff">/</span> <span style="color:#ff55ff">5</span><span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span></span></span></span>

在构造函数中,我们首先创建标签和滚动区域。

我们将 的大小策略设置为 ,使用户能够在打开该选项时将图像缩放到他们想要的任何大小。否则,当滚动区域小于标签的最小大小提示时,默认大小 polizy () 将使滚动条出现。imageLabel

我们确保标签将缩放其内容以填充所有可用空间,以使图像在缩放时能够正确缩放。如果我们省略设置 's 属性,放大将放大 ,但保持像素图保持其原始大小,露出 的背景。imageLabel

我们制作滚动区域的子小部件,并制作 .最后,我们创建关联的操作和菜单,并自定义 的外观。imageLabelscrollAreaImageViewer

<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#ffff55">static</span> <span style="color:#ffff55">void</span><span style="color:#ffffff"> initializeImageFileDialog</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qfiledialog.html" href="https://doc.qt.io/qt-6/qfiledialog.html"><span style="color:#21be2b">QFileDialog</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亭台六七座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值