5.QT应用程序主窗口

news2024/12/26 0:07:31

本章代码见文末链接

主窗口框架

在这里插入图片描述
新建Qt Wisgets项目mymainwindow,类名默认MainWindow,基类默认QMainWindow

更改文字如图,如果中文无法直接输入,可以试试复制粘贴
在这里插入图片描述

“动作编辑器”中(默认在右下角),找到新建的动作
在这里插入图片描述
右键然后添加工具栏,objectName改为mainToolBar
将“动作编辑器”的“新建文件(&N)”文字拖到横线上,会有一个红色竖线提示位置正确
在这里插入图片描述
在这里插入图片描述

运行结果:(alt+F快捷键)
在这里插入图片描述

添加资源

使用图片logo(ui界面)

在项目的文件目录mymainwindow中新建文件夹images,放入图片

右键项目,选择“Add new…”,命名为myimages
在这里插入图片描述
新建后默认到如下打开qrc的界面,添加前缀改为如下,在选择添加文件,选择刚刚新建的放入图片的images文件夹,然后ctrl+S
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ce3fb4ef44e4755b5ec8645eb1b5c9a.png
在ui界面双击“新建文件”动作(之前拖动的文字),点击“图标”后面的三个点,选择图片
在这里插入图片描述
在“Shortcut”后单击,按下ctrl+N,设为快捷键
在这里插入图片描述
运行结果:(按alt+F)
在这里插入图片描述
查看qrc资源文件的内容:
在这里插入图片描述
在这里插入图片描述
还有pro文件也已经增加了
在这里插入图片描述

使用图片logo(代码方式)

再以代码形式使用图片

//mainwindow.cpp构造函数中添加

#include<QMenu>
#include<QAction>
#include<QIcon>
 
    QMenu *editMenu=ui->menubar->addMenu(tr("编辑(&E)"));
    QAction *action_Open=editMenu->addAction(QIcon(":/image/images/bat.png"),tr(" 打开(&O)"));
    action_Open->setShortcut(QKeySequence("Ctrl+O"));
    ui->mainToolBar->addAction(action_Open);

运行结果:
在这里插入图片描述

菜单栏

//继续添加构造函数

#include<QActionGroup>

    QActionGroup *group=new QActionGroup(this);
    QAction *action_L=group->addAction(tr("Left(&L)"));
    action_L->setCheckable(true);
    QAction *action_R=group->addAction(tr("Right(&R)"));
    action_R->setCheckable(true);
    QAction *action_C=group->addAction(tr("Center(&C)"));
    action_C->setCheckable(true);
    action_L->setChecked(true);//指定为选中状态
    editMenu->addSeparator();
    editMenu->addAction(action_L);
    editMenu->addAction(action_R);
    editMenu->addAction(action_C);

运行结果:
在这里插入图片描述

工具栏

//继续添加构造函数

#include<QToolButton>
#include<QSpinBox>

    QToolButton *toolBtn=new QToolButton(this);
    toolBtn->setText(tr("Color"));
    QMenu *colorMenu=new QMenu(this);
    colorMenu->addAction(tr("Red"));
    colorMenu->addAction(tr("Green"));
    toolBtn->setMenu(colorMenu);
    toolBtn->setPopupMode(QToolButton::MenuButtonPopup);
    ui->mainToolBar->addWidget(toolBtn);
    QSpinBox *spinBox=new QSpinBox(this);
    ui->mainToolBar->addWidget(spinBox);

运行结果:
在这里插入图片描述

中心部件

.ui界面拖用MDI Area,右键“新建文件”动作,选择“转到槽”的triggered()
在这里插入图片描述

//自动转到mainwindow.cpp的on_action_N_triggered()槽

#include<QTextEdit>
#include<QMdiSubWindow>

    QTextEdit *edit=new QTextEdit(this);
    QMdiSubWindow *child=ui->mdiArea->addSubWindow(edit);
    child->setWindowTitle(tr("Multi-File-Edit"));
    child->show();

运行结果:ctrl+N,可输入文字
在这里插入图片描述

Dock部件

ui界面拖用Dock Widget,再拖入Push Button、Font Combo Box
Dock Widget的windowTitle属性改为“工具箱”
在这里插入图片描述

在文件菜单添加“显示Dock”菜单项,动作编辑器中右键“显示Dock”转到槽triggered()

//自动转到mainwindow.cpp的on_action_Dock_triggered()槽

#include<QDockWidget>

    ui->dockWidget->show();

运行结果:
在这里插入图片描述

点击“工具箱”后面的两个方框,dock可以悬浮,拖动可以再次固定到上下左右;
叉掉后再点击“显示dock”又出现
在这里插入图片描述

状态栏

//继续添加构造函数

#include<QLabel>

    ui->statusbar->showMessage(tr("Welcome!"),3000);
    QLabel *permanent=new QLabel(this);
    permanent->setFrameStyle(QFrame::Box|QFrame::Sunken);
    permanent->setText("www.qter.org");
    ui->statusbar->addPermanentWidget(permanent);

运行结果:“Welcome!”显示3秒,“www.qter.org”永久显示
在这里插入图片描述

自定义菜单

新建Qt Widgets项目myaction,其余默认
右键项目名,新建C++类如下
在这里插入图片描述
运行结果:输入后回车,显示文字在文本编辑器中
在这里插入图片描述

富文本处理

新建Qt Widgets项目myrichtext,其余默认
直接敲代码,然后运行(代码见文末链接)

运行结果:
在这里插入图片描述
点击“Frame”,Debug处显示如下:
在这里插入图片描述
点击“textBlock”,Debug处显示如下:
在这里插入图片描述
若点击font(在哪里点击,就出现在哪个框中)
在这里插入图片描述
插入表格、列表、图片(图片放到myrichtext文件夹,并在槽中改名即可)

void MainWindow::insertImage()
{
    QTextImageFormat format;
    format.setName("../myrichtext/QQ.png");
    ui->textEdit->textCursor().insertImage(format);
}

在这里插入图片描述
“查找”功能在Debug处显示位置
在这里插入图片描述
右键项目名,新建C++类mysyntaxhighlighter,基类选择QSyntaxHighlighter,如下:
在这里插入图片描述
输入单词“char”,会高亮显示
在这里插入图片描述

拖放操作

使用拖放打开文件

已经解决:拖放到主窗口,显示乱码
在这里插入图片描述

//mainwindow.cpp中

void MainWindow::dropEvent(QDropEvent *event)
{
    const QMimeData *mimeData=event->mimeData();
    if(mimeData->hasUrls()){
        QList<QUrl>urlList=mimeData->urls();
        QString fileName=urlList.at(0).toLocalFile();
        if(!(fileName.isEmpty())){
            QTextCodec *codec = QTextCodec::codecForName("UTF-8");
            QFile file(fileName);
            if(!(file.open(QIODevice::ReadOnly))) return;
            QTextStream in(&file);
            in.setCodec(codec);
            ui->textEdit->setText(in.readAll());
        }
    }
}

运行结果:拖放到文本编辑器中,显示路径
在这里插入图片描述
拖放到主窗口,显示文本内容
在这里插入图片描述

自定义拖放操作

直接敲代码,然后运行(代码见文末链接)

//在三个槽中保留同一个event的Action,即可选择拖动/复制功能
void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
void MainWindow::dragMoveEvent(QDragMoveEvent *event)   // 拖动事件
void MainWindow::dropEvent(QDropEvent *event) // 放下事件

//下面两行自选一行,另一行注释掉
//             event->setDropAction(Qt::MoveAction);
             event->setDropAction(Qt::CopyAction);

运行结果:
MoveAction:拖动有阴影
CopyAction:拖动有阴影,松开即复制
在这里插入图片描述

打印文档

运行结果:
点击“预览”
在这里插入图片描述
点击“生成”,(以Release模式运行),在build…Realease文件夹中找到demo.pdf
在这里插入图片描述

参考书目

Qt Creator快速入门第三版

本章代码及使用方法

本章代码

遇到各种提示都点“OK”或者“Yes”(主要是关于版本的兼容性提示)

遇到如下问题的解决方法:
在这里插入图片描述
在“项目”模式的“Build & Run”点击“绿色加号”(任选一个),再回到“编辑”模式
在这里插入图片描述
直接点击“绿色箭头”即可运行
在这里插入图片描述
该方法同样适用于打开Qt Creator自带的“欢迎”界面的案例项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI数字人系统搭建源码

AI数字人系统的功能可以根据具体应用场景而定&#xff0c;以下是一些可能的功能&#xff1a; 语音识别和合成&#xff1a;将自然语言转换为机器可读的文本&#xff0c;或将机器生成的文本转换为自然语言的语音输出。 面部表情捕捉&#xff1a;利用摄像头等设备获取用户…

2023鲁大师评测沟通会:鲁大师尊享版登场、“鲁小车”正式上线

作为硬件评测界的“老兵”&#xff0c;鲁大师不仅有着十几年的硬件评测经验&#xff0c;并且一直都在不断地尝试、不断地推陈出新。在5月9日举行的“2023年鲁大师评测沟通会”上&#xff0c;鲁大师向大众展示了在过去一年间取得的成果。 PC业务迭代升级&#xff0c;鲁大师客户端…

day(2,3)-内核模块

内核模块上 主要内容 向内核添加新功能 内核模块基础代码讲解 内核模块多源文件编程 内核模块信息宏 一、向内核添加新功能 1.1 静态加载法&#xff1a; 即新功能源码与内核其它代码一起编译进uImage文件内 Kconfig是make menuconfig的界面配置文件 1.2动态加载法&am…

Yolov8改进---注意力机制:DoubleAttention、SKAttention,SENet进阶版本

目录 🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 1. DoubleAttention 2. SKAttention 3.总结

2022-4-4基于单片机的MQ2烟雾传感器报警系统设计

基于单片机的MQ2烟雾传感器报警系统设计 源代码和仿真图及MQ2相关资料可在文末的链接中下载 该系统实现的功能&#xff1a;检测空气中的烟雾浓度并实现超阈值报警 该系统组成由&#xff1a; 单片机最小系统、ADC0832、MQ2烟雾传感器、LCD1602液晶模块、声光报警模块、按键模…

研究人员发现微软Azure API管理服务存在3个漏洞

微软Azure API管理服务中披露了三个新的安全漏洞&#xff0c;恶意行为者可能会滥用这些漏洞来访问敏感信息或后端服务。 据以色列云安全公司Ermetic称&#xff0c;这包括两个服务器端请求伪造(SSRF)漏洞和API管理开发人员门户中的一个不受限制的文件上传功能实例。 安全研究员…

【腾讯云 Finops Crane 集训营】Crane应用实战

文章目录 前言一、Crane是什么&#xff1f;二、Crane的特点三、Crane使用1、环境准备2、安装Crane3、访问dashboard4、页面展示5、功能应用 四、Crane的优势总结 前言 FinOps&#xff08;Financial Operations&#xff09;是一种管理云计算成本的方法&#xff0c;它强调将云计…

使用PyTorch构建神经网络,并使用thop计算参数和FLOPs

文章目录 使用PyTorch构建神经网络&#xff0c;并使用thop计算参数和FLOPsFLOPs和FLOPS区别使用PyTorch搭建神经网络整体代码1. 导入必要的库2. 定义神经网络模型3. 打印网络结构4. 计算网络FLOPs和参数数量5. 结果如下手动计算params手动计算FLOPs注意 使用PyTorch构建神经网络…

车联网强势发展下,有什么隐患?

通过新一代信息通信技术&#xff0c;车联网实现了汽车与云平台&#xff0c;车辆和汽车&#xff0c;道路&#xff0c;汽车和人以及内部的全方位网络链接。车联网使用传感器技术感知车辆的状态信息&#xff0c;并利用无线通信网络和现代智能信息处理技术的帮助实现交通智能化管理…

FPGA入门系列10--按键消抖

文章简介 本系列文章主要针对FPGA初学者编写&#xff0c;包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解&#xff0c;旨在更快速的提升初学者在FPGA开发方面的能力&#xff0c;每一个章节中都有针对性的代码…

Redis高可用系列——Set类型底层详解

文章目录 概述intsetintset 和 hashtable 的转换为什么加入了listpackhashtable 的空间开销高hashtable 的碰撞概率高intset 、listpack和hashtable的转换 概述 在讲解set结构之前&#xff0c;需要先说明一下set结构编码的更替&#xff0c;如下 在Redis7.2之前&#xff0c;se…

Ansys Lumerical | CMOS - 光学仿真方法

通过使用更小的像素尺寸和更大的填充因子&#xff0c;基于CMOS图像传感器像素的数码相机系统的成本正在降低。但是&#xff0c;只有在不牺牲图像质量的情况下&#xff0c;CMOS像素尺寸减小才是可以接受的。随着CMOS像素尺寸的不断减小&#xff0c;图像信噪比降低&#xff0c;相…

《我命由我不由天》蔡志忠——笔记一

目录 简介 经典摘录 三岁决定一生 父母该什么时候放手 确定将来要成为什么 积极主动为目标而努力 叛逆是最伟大的创意 父亲给蔡志忠最大的影响是教会他两件事 价值观缺陷导致的后果 人有三个阶段 简介 作者 蔡志忠&#xff0c;李虹。 蔡志忠&#xff1a;漫画家、哲…

力扣-1769. 移动所有球到每个盒子所需的最小操作数

题目&#xff1a; 有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中&#xff0c;你可以将 一个 小球从某个盒子移动到一个与…

搜索引擎优化SEO和SEM有什么不一样

SEO&#xff08;搜索引擎优化&#xff09;和SEM&#xff08;搜索引擎营销&#xff09;都是用于提高网站在搜索引擎中的排名和能见度的技术。虽然它们的目标是相同的&#xff0c;但它们的方法和重点略有不同&#xff0c;今天和大家聊聊SEO和SEM有什么不同。 一、SEO SEO是指通…

红帽8配置yum源

使用传输工具 上传文件到/etc/yum.repos.d/ 或 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo 注&#xff1a;不能下载wget直接上传文件 关闭订阅插件提示 [redhatroot ~]$ vi /etc/yum.conf #添加 plugins0 [redhatroot ~]$ …

docker+jenkins自动化部署springboot项目

前置:环境配置 阿里云服务器1核2GBjava 1.8.0._371maven apache-maven3.8.8git 1.8.3.1 docker和jenkins在一台服务器上&#xff0c;环境的配置&#xff0c;对于java和maven可以自己下载对应tar包进行配置&#xff0c;记得配置环境&#xff0c;也可以使用yum进行安装。记得配置…

FS5175AE降压型1-4节锂电池充电芯片

FS5175AE是一款工作于5V到24V的多串锂电池同步开关降压充电管理芯片。内置MOS管集成了低导通阻抗的NMOS&#xff0c;FS5175AE采用1MHz同步开关架构&#xff0c;实现高 效率充电并简化外围器件&#xff0c;降低BOM成本。通过调节检测电阻&#xff0c;可实现**2A充电电流&#xf…

【Java校招面试】基础知识(八)——Linux服务器

目录 前言一、基础概念二、常用命令后记 前言 本篇主要介绍Linux服务器的相关内容。 “基础知识”是本专栏的第一个部分&#xff0c;本篇博文是第八篇博文&#xff0c;如有需要&#xff0c;可&#xff1a; 点击这里&#xff0c;返回本专栏的索引文章点击这里&#xff0c;返回…

仿抖音开发需要注意的问题

一、版权问题 仿抖音开发需要注意版权问题&#xff0c;包括内容的版权和软件的版权。在开发的过程中&#xff0c;不要直接抄袭他人的作品&#xff0c;应该注重保护知识产权。 二、安全性问题 仿抖音开发需要重视应用的安全性问题&#xff0c;避免应用在使用过程中发生安全漏…