4.QT应用程序主窗口

news2024/11/16 3:18:34

本章代码见文末链接

主窗口框架

在这里插入图片描述
新建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
在这里插入图片描述

本章代码及使用方法

本章代码

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

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

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

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

相关文章

关于IRIG-B码对时的理解和分析

一、IRIG-B是什么&#xff1f; IRIG-B&#xff08;简称B码&#xff09;是一种应用于靶场的串行时间交换码。由美国靶场司令部委员会下属“靶场仪器组”提出的一种时间信息编码标准&#xff08;IRIG是英文InterRange Instrumentation Group的缩写。它是美国靶场司令委员会的下属…

一百零八、Kettle采集Kafka数据到HDFS(踩坑,亲测有效)

Kafka到HDFS&#xff0c;除了用Kafka API和flume之外&#xff0c;还可以用kettle&#xff0c;最大优点是不用写代码&#xff01; 版本&#xff1a;Kettle版本&#xff1a;8.2、Hadoop版本&#xff1a;3.1.3 前提&#xff1a; 详情请看鄙人的一百零一、Kettle8.2.0连接Hive…

pip安装配置清华镜像源scrapy框架,并进行框架的案例演示

文章目录 运行cmd终端后直接输入安装成功scrapy框架安装成功 为什么使用此命令安装scrapy框架成功后创建scrapy项目建议在pycharm终端创建项目打开项目 用scrapy框架实现案例——从新浪网爬取热点并把数据输入到excel表中编辑setting.py文件创建脚本、写入脚本在终端运行脚本文…

长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎...

生物医药是国家“十四五”规划中明确的战略性新兴产业之一。长三角地区是中国生物医药产业的排头兵&#xff0c;也是《“十四五”生物经济发展规划》的“生物经济先导区”之一。据《上海市生物医药产业投资指南》显示&#xff0c;2022 年上海市生物医药产业在 I 类国产创新药数…

新手如何学习挖漏洞?【网络安全】

新手如何学习挖漏洞&#xff1f;看这篇就够了 前言 有不少阅读过我文章的伙伴都知道&#xff0c;我从事网络安全行业已经好几年&#xff0c;积累了丰富的经验和技能。在这段时间里&#xff0c;我参与了多个实际项目的规划和实施&#xff0c;成功防范了各种网络攻击和漏洞利用&…

Cron表达式X分钟执行一次的设计缺陷。SQL JOIN的设计缺陷。在线Cron表达式网站的缺陷。Spring 定时任务的年问题。

Cron Cron表达式 定时任务计划任务 Chronological英 /ˌkrɒnəˈlɒdʒɪk(ə)l/adj. 按发生时间顺序排列的&#xff1b;&#xff08;年龄&#xff09;按时间计算的1. 月 周设计精妙吗&#xff1f; 学习 0/5 * * * * ? * 秒 分 时 日 月 周 年1. 年一般省略。为&#xf…

Live800:服务经济时代,企业如何满足客户需求?

在互联网与市场经济的催化下&#xff0c;我们正在从产品经济时代过渡到服务经济时代。在产品经济时代&#xff0c;企业关注的核心是质量和成本&#xff1b;而在服务经济时代&#xff0c;如何面向客户&#xff0c;满足客户需求则成为企业建立核心竞争力的关键。 具体来说&#x…

【精选】关于洪涝灾害智慧水利和人工智能大模型的解决方案2023版

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 智慧水利平台 实现“全局一盘棋”的智慧水利综合管理&#xff0c;通过“一图、一库、一平台”结合水利大数据、数字孪生与人工智能&#xff0c;为水利工作提供有力的管理抓手&…

SingleR --细胞注释

文章目录 briefExample使用内置的 references使用其他注释好的数据集作为 reference singleR还提供了注释诊断的方法 brief Example The celldex package provides access to several reference datasets (mostly derived from bulk RNA-seq or microarray data)。 The Human…

《狂飙》原著来了,邀你重新见证

2023年的开篇十分精彩且丰富&#xff0c;经历过生活的不幸&#xff0c;新的一年万物复兴&#xff0c;每个人心底那颗躁动的心又重新释放&#xff0c;希望新的开始不负所望&#xff0c;年末复盘时所得皆所愿&#xff01; 开篇 开年影视第一炮&#xff0c;炸出了所有人被压抑的内…

AIGC技术发展和应用方向

AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;是指通过人工智能技术生成的各种文本、图像、音频和视频等多媒体内容。AIGC技术是机器学习和自然语言处理等技术的结合&#xff0c;通过对海量数据的学习和分析&#xff0c;可以让计算机模拟人类的创造力…

Spring Boot 单体应用一键升级成 Spring Cloud Alibaba

作者&#xff1a;十眠 背景 随着 Apache Dubbo、Nacos 以及 Spring Cloud 等服务框架的流行&#xff0c;越来越多的企业开始采用微服务架构来构建其应用程序。微服务架构使企业能够将其应用程序拆分成多个小型服务&#xff0c;这些服务可以独立部署和扩展。这种架构模式也使企…

怎么给pdf文件添加水印

怎么给pdf文件添加水印&#xff1f;PDF文件的应用比较广泛&#xff0c;大家喜欢将各种办公资料和文档转换成PDF格式&#xff0c;为什么呢&#xff1f;因为pdf文件具有比较强的稳定性而且不利于编辑修改&#xff0c;所以更利于保存和转发。有时候我们会在工作中花费大量时间制作…

第1天学习Docker——Docker简介

一、Docker是什么&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;基于 Golang 语言开发&#xff0c;可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 服务器。容器是一个沙箱机制&#xff0c;相互之间不会…

神经网络语言模型(NNLM)

神经网络语言模型【NNLM】 1 为什么使用神经网络模型&#xff1f;2 什么是神经网络模型&#xff1f;3. 代码实现3.1 语料库预处理代码3.2 词向量创建3.3 NNLM模型类3.4 完整代码 1 为什么使用神经网络模型&#xff1f; 解决独热编码无法解决词之间相似性问题 使用神经网络语言…

带稀缺注释的动物姿态估计CVPR2023

由于缺乏标记数据&#xff0c;动物姿态估计是一项重要但未被充分探索的任务。作者用稀缺的注释&#xff08;scarce annotation&#xff09;来处理动物姿态估计&#xff0c;其中只有一小部分标记数据和大部分未标记图像可用。并且&#xff0c;作者提出了ScarceNet&#xff0c;这…

Presto

Presto Presto基本介绍 前言 Presto是一款Facebook开源的MPP架构的OLAP查询引擎&#xff0c;可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎。因为工作中接触到Presto&#xff0c;研究它对理解SQL Parser、常见算子的实现&#xff08;如SQL中table scan,join,agg…

MySQL行锁、表锁间隙锁

事务隔离级别的实现原理&#xff1a;锁MVCC 表级锁&行级锁 表级锁&#xff1a;对整张表加锁。开销小&#xff0c;加锁快&#xff0c;不会出现死锁&#xff1b;锁粒度大&#xff0c;发生锁冲突的概率高&#xff0c;并发度低。 行级锁&#xff1a;对某行记录加锁。开销大&a…

论 spring 的三级缓存

论 spring 的三级缓存 预备知识 bean的生命周期 bean 的生命周期 为何会出现循环引用 这个问题只是出现在spring 容器的机制中&#xff0c;其实我们代码中很简单就解决了。 假设A 对象里需要注入一个B属性&#xff0c;B 对象里面需要注入一个A 属性。根据Bean 的生命周期&…

【原创】运维工程师涨薪计划,chatGPT帮你做规划

文章目录 1、运维工程师怎么涨薪呢&#xff1f;a&#xff09;加大深度b&#xff09;加大广度 2、运维工程师何处去呢&#xff1f;3、chatGPT告诉你3年、5年、10年运维和开发的现状&#xff1b;有运维经验的工程师&#xff0c;搞开发好吗薪资会有显著提升吗以数据证明&#xff0…