QML Book 学习基础5(An Image Viewer)

这篇具有很好参考价值的文章主要介绍了QML Book 学习基础5(An Image Viewer)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

桌面版(win端)

移动端


下面我们用更有挑战性例子来使用Qt控件,将创建一个简单的图像查看器。

桌面版(win端)

程序主要由四个主要区域组成,如下所示。菜单栏、工具栏和状态栏,通常由控件的实例填充,而内容区域是窗口子项所在的位置。

QML Book 学习基础5(An Image Viewer),# QML Book,学习,qt

 文章来源地址https://www.toymoban.com/news/detail-682702.html

原书作者(应该创建Qt Quick项目,但是不影响我们使用Qt Quick 2 UI项目)

由于我们面向桌面,因此我们强制使用 Fusion 样式。这可以通过配置文件、环境变量、命令行参数或在C++代码中以编程方式完成。我们采用后一种方式,将以下行添加到 :main.cpp

QQuickStyle::setStyle("Fusion");

 

import QtQuick 2.12
import QtQuick.Window 2.12
import Qt.labs.platform 1.0
import QtQuick.Dialogs 1.0
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.12

ApplicationWindow
{
    visible: true
    id:window
    width: 640
    height: 480
    background: Rectangle{color:"darkGray"}
    //创建一个ToolBar,当点击的时候会相应咱们创建的对话框打开
    header:ToolBar
    {
        anchors.fill:parent
        ToolButton
        {
            text: qsTr("open")
            icon.name: "open pictrue"
            onClicked: fileOpenDialog.open()
        }
    }
    //创建两个MenuBar,当点击的时候会相应咱们创建的对话框打开,或者打开关于这个软件对话框
    menuBar:MenuBar
    {
        Menu
        {
            title:qsTr("&file")
            MenuItem
            {
                text: qsTr("&open..")
                icon.name: "document-open"
                icon.source: "documentopen.png"
                onTriggered: fileOpenDialog.open()
            }
        }
        Menu
        {
            title:qsTr("&Help")
            MenuItem
            {
                text: qsTr("&About")
                onTriggered: aboutDialog.open()
            }
        }
    }

    //将打开的图片设置成缓存图像
    Image {
        id: image
        anchors.fill: parent
        fillMode: Image.PreserveAspectFit
        asynchronous: true
        cache: false

    }
    //图像文件打开窗口
    FileDialog
    {
        id:fileOpenDialog
        title:"Select Image file "
        //获取文档写的权限
        folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
        nameFilters: ["Image files (*.png *.jpeg *.jpg)",]
        onAccepted: {image.source = fileOpenDialog.fileUrl}
    }
    //关于这个软件信息窗口
    Dialog
    {
        id:aboutDialog
        title: qsTr("about")
        Label
        {
            anchors.fill: parent
            text: qsTr("QML Image Viewer\nA part of the QmlBook\nhttp://qmlbook.org")
            horizontalAlignment: Text.AlignHCenter
        }
        standardButtons: StandardButton.Ok
    }

QML Book 学习基础5(An Image Viewer),# QML Book,学习,qt

移动端

在原本基础上添加下面代码就可以

    Drawer {
           id: drawer

           width: Math.min(window.width, window.height) / 3 * 2
           height: window.height

           ListView {
               focus: true
               currentIndex: -1
               anchors.fill: parent

               delegate: ItemDelegate {
                   width: parent.width
                   text: model.text
                   highlighted: ListView.isCurrentItem
                   onClicked: {
                       drawer.close()
                       model.triggered()
                   }
               }

               model: ListModel {
                   ListElement {
                       text: qsTr("Open...")
                       triggered: function() { fileOpenDialog.open(); }
                   }
                   ListElement {
                       text: qsTr("About...")
                       triggered: function() { aboutDialog.open(); }
                   }
               }

               ScrollIndicator.vertical: ScrollIndicator { }
           }
       }

    header: ToolBar {
            // 桌面端无作用
            Material.background: Material.Orange
            ToolButton {
                id: menuButton
                anchors.left: parent.left
                anchors.verticalCenter: parent.verticalCenter
                icon.source: "baseline-menu-24px.svg"
                onClicked: drawer.open()
            }
            Label {
                anchors.centerIn: parent
                text: "Image Viewer"
                font.pixelSize: 20
                elide: Label.ElideRight
            }
        }

代码的详细解释:

创建了一个具有两个选项的列表视图(ListView)

  1. focus: true:这将使ListView获得焦点,这意味着当用户首次打开该界面时,ListView将成为用户可以直接与之交互的第一个元素。

  2. currentIndex: -1:这将设置当前选定的列表项的索引为-1,这意味着在开始时没有任何项目被选中。

  3. anchors.fill: parent:这将使ListView填充其父元素的所有可用空间,使得列表视图占据整个界面。

  4. delegate: ItemDelegate:这是ListView的代理对象,它负责创建列表中的每个元素。在这个例子中,它是一个ItemDelegate对象,用于显示每个列表项的内容。

    • width: parent.width:这将每个列表项的宽度设置为父元素的宽度,使得每个列表项占据整个列表视图的宽度。
    • text: model.text:这将显示模型中每个元素的文本。
    • highlighted: ListView.isCurrentItem:当一个列表项成为当前选定的项时,这个列表项会被高亮显示。
    • onClicked::当用户点击一个列表项时,这个列表项将被选中,然后关闭Drawer,并执行模型中指定的函数。
  5. model: ListModel:这是ListView的数据模型,它包含了一组ListElement,每个ListElement代表一个列表项。

    • 在这个例子中,数据模型有两个元素:
      • "Open...",点击时会打开一个文件打开对话框(fileOpenDialog.open())。
      • "About...",点击时会打开一个关于对话框(aboutDialog.open())。
  6. ScrollIndicator.vertical: ScrollIndicator { }:这是垂直滚动指示器,当列表视图的内容超过视窗时,滚动指示器会显示出来。

总的来说,这段代码创建了一个具有两个选项的列表视图,用户可以通过点击来选择一个选项,并根据选项的内容执行不同的操作。

QML Book 学习基础5(An Image Viewer),# QML Book,学习,qt

 

到了这里,关于QML Book 学习基础5(An Image Viewer)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6 Qt Quick UI原型学习QML第三篇

    图像 Image(图片)元素 解释 这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释: Image 元素是一个用于显示图像的控件。 id: root 是为Image元素指定了一个标识符,以便在代码中引用它。 signal clicked 定义了一个名为 clicked 的信号。信号用于在特

    2024年02月16日
    浏览(49)
  • Qt6 Qt Quick UI原型学习QML第六篇

    import QtQuick 2.12 :导入QtQuick模块的版本2.12,用于创建Qt快速应用程序的用户界面。 import QtQuick.Window 2.12 :导入QtQuick.Window模块的版本2.12,用于创建窗口对象。 import QtQuick.Controls 2.12 :导入QtQuick.Controls模块的版本2.12,用于创建用户界面控件。 Window {} :定义了一个窗口对象,

    2024年02月16日
    浏览(48)
  • Qt6 Qt Quick UI Prototype学习QML第一篇

    创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当您正在进行原型设计时才使用此功能。您无法使用此创建完整的应用程序。请考虑使用Qt Quick application项目 Qt Quick UI原型主要用于快速创建交互式的用户界面(UI)原型。它

    2024年02月16日
    浏览(48)
  • 用el-image-viewer实现全局预览图片

    背景 在后台管理系统中,一些预览图片的场景,通常都是使用 ` el-image-viewer `   去实现,但是如果多个地方都需要预览图片,又要重复的去写 ` el-image-viewer `    以及一些重复的和预览相关的代码。 可以把预览图片的组件放在根文件,把通用的预览相关的代码放在状态管理

    2024年01月16日
    浏览(36)
  • Qt/QML编程学习之心得:D-BUS进程间通信(四)

    Qt/QML应用编程最适合于一些触摸的嵌入式界面设计,那么GUI界面怎么与底层的设备通信,怎么与一个系统内其他模块通信的呢?这就不得不说一个很重要的设计模式: d-bus 。  D-BUS是一个系统中消息总线,用于IPC/RPC。消息系统很简单而功能强大,可以在一些命令行实用程序的

    2023年04月20日
    浏览(47)
  • 解决Edge浏览器,微博无法查看大图(Edge Image Viewer)

    使用Edge浏览器浏览微博或其它带校验的图片时,会导致无法查看。 主要原因为 Edge 自带了一个 Edge Image Viewer , 但是该图片查看器无法查看带校验数据的图片,所以导致查看时一片空白。 解决方法 地址栏输入 edge://flags/ 搜索 Edge Image Viewer 选择 Disabled 关闭 Edge Image Viewer 重启浏

    2024年02月21日
    浏览(59)
  • elementui ui对el-image-viewer的简单封装及使用

    在项目中,会有对图片预览查看的需求。当使用el-dialog进行图片预览实现时,会出现长图片占满整个浏览器,致使图片不能完整的显示的情况,这对使用者的体验非常不友好,使用elementui提供的el-image-viewer就能解决这个问题。            1.注册组件 2.使用组件   好了,一个

    2024年02月11日
    浏览(45)
  • 【Vue】fabricjs 实现局部截图及el-image-viewer大图预览

    效果图: 再结合el-image-viewer可以实现大图预览局部图的效果。

    2024年02月22日
    浏览(51)
  • vue3+elementplus点击按钮使用el-image-viewer图片预览组件

    1.首先确保你是全局引入,不是全局的需要自主引入该组件 2..vue文件中定义组件 3. showsrcListref:[\\\'\\\']格式 4.点击按钮给showsrcListref赋值即可完成,同时将showImagePreview置为true

    2024年01月18日
    浏览(63)
  • QML Image 通过 QQuickAsyncImageProvider 异步加载图片

    相关:QML Image 通过 QQuickImageProvider 加载图片-CSDN博客 根据 QQuickImageProvider 的文档说明,该类其实是支持在独立线程中异步加载的,但是 Async 类提供了专用于异步加载的接口,操作起来也不复杂,对于大文件或者网络文件,都可以采用异步方式加载图片。 继续 QQuickAsyncImag

    2024年01月19日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包