Qt复习第二天

news2024/11/20 8:29:24

1、菜单栏工具栏状态栏

#include "mainwindow.h"
#include "ui_mainwindow.h"
#pragma execution_character_set("utf-8");
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //菜单
    QMenu *editMenu = ui->menubar->addMenu("编辑(&E)");
    QAction*action_copy = editMenu->addAction(QString("复制(&C)"));//前面还可以写个QIcon
    action_copy->setShortcut(QKeySequence("Ctrl + C"));

    //工具栏操作
    ui->toolBar->addAction(action_copy);

    //动作加入分组
    QActionGroup*group = new QActionGroup(this);
    QAction*action_L = group->addAction(("左对齐(&L)"));
    QAction*action_R = group->addAction(("左对齐(&R)"));

    action_L->setCheckable(true);
    action_R->setCheckable(true);

    editMenu->addSeparator();//添加分割线

    //工具栏添加部件
    QToolButton*toolBtn = new QToolButton(this);
    toolBtn->setText("颜色");

    //工具栏设置菜单
    QMenu *colorMenu = new QMenu(this);
    colorMenu->addAction("绿色");
    colorMenu->addAction("红色");
    toolBtn->setMenu(colorMenu);

    toolBtn->setPopupMode(QToolButton::MenuButtonPopup);//弹出的菜单

    ui->toolBar->addWidget(toolBtn);

    QSpinBox*spinBox = new QSpinBox(this);
    ui->toolBar->addWidget(spinBox);

    //状态栏显示信息
    ui->statusbar->showMessage(QString("欢迎。。。"),3000);

    //添加永久的
    QLabel*tag = new QLabel("wcoao");
    ui->statusbar->addPermanentWidget(tag);



}

MainWindow::~MainWindow()
{
    delete ui;
}


实现效果如下:
在这里插入图片描述
在这里插入图片描述

2、自定义菜单栏

1、需要继承于QWidgetAction
写一个Myaction类

#ifndef MYACTION_H
#define MYACTION_H

#include <QWidgetAction>
#include <QObject>
#include<QLineEdit>
class Myaction : public QWidgetAction
{
    Q_OBJECT
public:
    explicit Myaction(QObject *parent = nullptr);

protected:
    QWidget*createWidget(QWidget*parent);

signals:
    void getText(const QString&string);

private slots:
    void sendText();

private:
    QLineEdit*lineedit;
};

#endif // MYACTION_H


#include "myaction.h"
#include<QSplitter>
#include<QLabel>
Myaction::Myaction(QObject *parent)
    : QWidgetAction{parent}
{
    lineedit = new QLineEdit;
    connect(lineedit,&QLineEdit::returnPressed,this,&Myaction::sendText);

}

QWidget *Myaction::createWidget(QWidget *parent)
{
    //判断父部件是否继承菜单或者工具栏
    //如果创建部件的子部件并放回子部件
    if(parent->inherits("QMenu")||parent->inherits("QToolBar"))
    {
        QSplitter *splitter = new QSplitter(parent);
        QLabel*label = new QLabel("插入文本");
        splitter->addWidget(label);
        splitter->addWidget(lineedit);
        return splitter;
    }
    return 0;
}

void Myaction::sendText()
{
    emit getText(lineedit->text());
    lineedit->clear();
}

QMainWindow::
    Myaction*action = new Myaction;
    QMenu*menu = ui->menubar->addMenu("编辑(&E)");
    menu->addAction(action);
    connect(action,&Myaction::getText,this,&MainWindow::setText);


void MainWindow::setText(const QString &str)
{
    ui->textEdit->setText(str);
}


3、富文本

#include "mainwindow.h"
#include "ui_mainwindow.h"


#include<QTextFrame> //富文本
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //获取文档对象
    QTextDocument *document = ui->textEdit->document();

    //获取根框架
    QTextFrame *rootFrame = document->rootFrame();

    //文档格式框架
    QTextFrameFormat format;
    format.setBorderBrush(Qt::red);
    format.setBorder(3);

    //文档框架设置格式
    rootFrame->setFrameFormat(format);

    //设置文本边框风格
    QTextFrameFormat frameFormat;
    frameFormat.setBackground(Qt::lightGray);
    frameFormat.setMargin(10);
    frameFormat.setPadding(15);
    frameFormat.setBorder(2);
    frameFormat.setBorderStyle(QTextFrameFormat::BorderStyle_DotDash);

    QTextCursor cursor = ui->textEdit->textCursor();
    cursor.insertFrame(frameFormat);
}

MainWindow::~MainWindow()
{
    delete ui;
}


效果:
在这里插入图片描述

4、文本框块字符格式

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QAction>
#include<QTextDocument>
#include<QTextFrame>
#include<QDebug>
#include<QTextBlockFormat>
#pragma execution_character_set("utf-8");
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QAction *action_textFrame = new QAction("框架",this);
    connect(action_textFrame,&QAction::triggered,this,&MainWindow::showtextFrame);

    QAction*action_textBlock = new QAction("文本块",this);
    connect(action_textBlock,&QAction::triggered,this,&MainWindow::showTextBlock);
    QAction*action_setText = new QAction("字体",this);
    connect(action_setText, SIGNAL(triggered(bool)), this, SLOT(setTextFont(bool)));

    ui->toolBar->addAction(action_setText);
    ui->toolBar->addAction(action_textBlock);
    ui->toolBar->addAction(action_textFrame);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showtextFrame() //文本框架
{
    QTextDocument* document = ui->textEdit->document();
    QTextFrame* frame = document->rootFrame();

    QTextFrame::iterator it;
    for (it = frame->begin(); !it.atEnd(); ++it)
    {
        //获取当前框架的指针
        QTextFrame* childframe = it.currentFrame();

        QTextBlock childBlock = it.currentBlock();
        if (childframe)
        {
            qDebug() << "frame";
        }
        else if (childBlock.isValid())
        {
            qDebug() << "block " << childBlock.text();
        }
    }
}


void MainWindow::setTextFont(bool checked)
{
    if(!checked)
    {
        QTextCursor cursor= ui->textEdit->textCursor();
        //文本块格式
        QTextBlockFormat blockFormat;
        //居中对齐
        blockFormat.setAlignment(Qt::AlignCenter);
        cursor.insertBlock(blockFormat);

        //字符格式
        QTextCharFormat charFormat;
        //字符背景色
        charFormat.setBackground(Qt::lightGray);
        //前景色
        charFormat.setForeground(Qt::blue);

        //字体
        charFormat.setFont(QFont(QString("宋体"),12,QFont::Bold,true));

        //下划线
        charFormat.setFontUnderline(true);
        //设置字符格式
        cursor.setCharFormat(charFormat);
        cursor.insertText("哈哈哈");
    }
    qDebug()<<checked;
}

void MainWindow::showTextBlock()
{
    QTextDocument *document = ui->textEdit->document();
    QTextBlock block = document->firstBlock();

    for(int i = 0;i<document->blockCount();i++)
    {
        qDebug()<<QString("文本块:%1,文本首行行号为: %2,长度为%3,内容为%4").arg(i).arg(block.firstLineNumber()
).arg(block.length()).arg(block.text());
        block = block.next();
    }
}


效果如下:
在这里插入图片描述

5、文档插入表格列表图片

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QAction>
#include<QTextTableFormat>
#include<QTextCursor>
#include<QTextListFormat>
#include<QFileDialog>
#include<QImageReader>
#include<QTextImageFormat>
#pragma execution_character_set("utf-8");
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QAction*action_table = new QAction("表格",this);
    connect(action_table,SIGNAL(triggered(bool)),this,SLOT(insertTable()));

    QAction*action_list = new QAction("列表",this);
    connect(action_list,SIGNAL(triggered(bool)),this,SLOT(insertList()));

    QAction*action_pic = new QAction("表格",this);
    connect(action_pic,SIGNAL(triggered(bool)),this,SLOT(insertImage()));

    ui->toolBar->addAction(action_list);
    ui->toolBar->addAction(action_table);
    ui->toolBar->addAction(action_pic);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::insertTable() //插入图
{
    QTextCursor cursor = ui->textEdit->textCursor();
    QTextTableFormat format;//表格格式
    format.setCellSpacing(2);
    format.setCellPadding(10);
    cursor.insertTable(3,3,format);
}

void MainWindow::insertList() //插入列表
{
    QTextListFormat format;//列表格式
    format.setStyle(QTextListFormat::ListDecimal);//数字编号
    ui->textEdit->textCursor().insertList(format);
}

void MainWindow::insertImage()
{
    QString filepath = QFileDialog::getOpenFileName(this,"选择图片",".",
"JPEG(*.jpg *.jpeg);;""GIF(*.gif);;""PNG(*.png)");

    QUrl url(QString("file://%1").arg(filepath));
    QImage image = QImageReader(filepath).read();

    QTextDocument*document = ui->textEdit->document();
    //文档添加图片资源
    document->addResource(QTextDocument::ImageResource,url,QVariant(image));

    QTextCursor cursor = ui->textEdit->textCursor();
    QTextImageFormat imgFormat;
    imgFormat.setWidth(image.width());
    imgFormat.setHeight(image.height());
    imgFormat.setName(url.toString());
    cursor.insertImage(imgFormat);

}


效果展示:
在这里插入图片描述

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

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

相关文章

【C++】转换构造函数和类型转换函数

目录 转换构造函数转换构造函数调用 类型转换函数类型转换函数定义形式应用 转换构造函数 转换构造函数就是一种构造函数&#xff0c;将一个其他类型的数据转换成一个类的对象的构造函数。 类型->类对象 转换构造函数调用 &#xff08;1&#xff09;显式强制类型转换&…

抽象类基本概念

抽象类及抽象方法 概念&#xff1a;一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这种类被定义为抽象类&#xff0c;含有抽象方法的类也被称为抽象类。 用通俗的话来说就是当一个类的某个功能&#xff08;方法&#xff09;实现不确定时&#xff0c;我们就将该…

数据挖掘(二)数据预处理

前言 基于国防科技大学 丁兆云老师的《数据挖掘》 数据挖掘 数据挖掘&#xff08;一&#xff09;数据类型与统计 2、数据预处理 2.1数据清理 缺失值处理&#xff1a; from sklearn.impute import SimpleImputer# 创建一个SimpleImputer对象&#xff0c;指定缺失值的处理策略…

信息系统项目管理基础

目录 一、项目管理概论 1、定义 2、项目管理的十二原则 3、SMART原则 4、项目经理 5、项目的生命周期 二、项目立项管理 1、项目启动过程 三、项目整合管理 1、管理基础 2、项目整合管理过程 ①制定项目章程 ②制定项目管理计划 ③指导与管理项目工作 ④管理项目…

【算法与数据结构】数组

文章目录 前言数组数组的定义数组的基本操作增加元素删除元素修改元素查找元素 C STL 中的数组arrayvector Python3 中的列表访问更改元素值遍历列表检查列表中是否存在某元素增加元素删除元素拷贝列表总结 Python3 列表的常用操作 参考资料写在最后 前言 本系列专注更新基本数…

计算机系列之数据库技术

13、数据库技术&#xff08;重点、考点&#xff09; 1、三级模式-两级映像&#xff08;考点&#xff09; 内模式&#xff1a;管理如何存储物理的数据&#xff0c;对应具体物理存储文件。 **模式&#xff1a;**又称为概念模式&#xff0c;就是我们通常使用的基本表&#xff0c…

AI算法-高数3-导数-求导法则

P16 2.2 求导法则&#xff0c;宋浩老师&#xff1a;2.2 求导法则_哔哩哔哩_bilibili 反函数求导法则&#xff1a; 复合函数求导&#xff1a;剥洋葱法。

H5 鼠标点击粒子扩散效果

&#x1f9d0;别人的博客中有这样的效果&#xff0c;于是自己就尝试实现了一下。 效果如图 源码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

一文彻底读懂信息安全等级保护:包含等保标准、等保概念、等保对象、等保流程及等保方案(附:等保相关标准文档)

1. 什么是等级保护&#xff1f; 1.1. 概念 信息安全等级保护是指根据我国《信息安全等级保护管理办法》的规定&#xff0c;对各类信息系统按照其重要程度和保密需求进行分级&#xff0c;并制定相应的技术和管理措施&#xff0c;确保信息系统的安全性、完整性、可用性。根据等…

CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文件包含 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;文件包含解题方法1:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7355b3c124dfe8cdf1c95e6991553.png#pic_ce…

Docker快速搭建NAS服务——NextCloud

Docker快速搭建NAS服务——NextCloud 文章目录 前言NextCloud的搭建docker-compose文件编写运行及访问 总结 前言 本文主要讲解如何使用docker在本地快速搭建NAS服务&#xff0c;这里主要写如下两种&#xff1a; FileBrowser1&#xff1a;是一个开源的Web文件管理器&#xff…

我觉得POC应该贴近实际

今天我看到一位老师给我一份测试数据。 这是三个国产数据库。算是分布式的。其中有两个和我比较熟悉&#xff0c;但是这个数据看上去并不好。看上去第一个黄色的数据库数据是这里最好的了。但是即使如此&#xff0c;我相信大部分做数据库的人都知道。MySQL和PostgreSQL平时拿出…

常用七大加密软件排行榜|好用加密文件软件分享

数据安全与隐私保护已成为我们每个人都必须面对的重要问题。 文件加密软件作为保障数据安全的关键工具&#xff0c;其重要性不言而喻。 在众多的加密软件中&#xff0c;哪些软件能够在保障数据安全的同时&#xff0c;又具备良好的易用性和稳定性呢&#xff1f; 本文将为您揭秘…

YOLO系列笔记(十)—— 基础:卷积层及其计算公式

卷积层及其计算公式 前言定义与功能计算过程与输出尺寸没有填充的情况有填充的情况 网络结构中的表示分析一&#xff1a;数字的含义分析二&#xff1a;分支的含义 前言 卷积层是在深度学习领域中非常常见、基础且重要的一种神经网络层。许多初学者可能会对卷积层的功能、其计算…

【Git】Github创建远程仓库并与本地互联

创建仓库 点击生成新的仓库 创建成功后会生成一个这样的文件 拉取到本地 首先先确保本地安装了git 可以通过终端使用 git --version来查看是否安装好了git 如果显示了版本信息&#xff0c;说明已经安装好了git&#xff0c;这时候我们就可以进入我们想要clone到问目标文件夹 …

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

【计算机毕业设计】springboot河北任丘非物质文化遗产数字化传承

当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c; 计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法&#xff0c;但这种管理方法存在着许…

TypeScript学习日志-第二十一天(声明文件d.ts)

声明文件d.ts 在使用 Typescript 并使用第三方库 的时候 我们会发现会有很多的提示或补全&#xff0c;这都是声明文件起的作用&#xff0c;但是有写冷门的第三方库是没有声明文件的&#xff0c;这时候引用就会报错&#xff0c;我们就使用 express 库作为例子来展示一下&#x…

视频怎么打水印?6个软件教你快速进行视频水印制作

视频怎么打水印&#xff1f;6个软件教你快速进行视频水印制作 添加水印是保护视频版权、提升视频专业性的重要手段之一。以下是六款软件&#xff0c;它们能够帮助你快速进行视频水印制作&#xff0c;让你的视频更具个性和专业性&#xff1a; 1.迅捷视频剪辑软件&#xff1a;…

Docker快速搭建NAS服务——FileBrowser

Docker快速搭建NAS服务——FileBrowser 文章目录 前言FileBrowser的搭建docker-compose文件编写运行及访问 总结 前言 本文主要讲解如何使用docker在本地快速搭建NAS服务&#xff0c;这里主要写如下两种&#xff1a; FileBrowser1&#xff1a;是一个开源的Web文件管理器&…