1、混合方式UI设计

1、混合方式UI设计

  • 新建项目
    • 添加静态资源
    • 添加资源
    • 添加action
    • 添加菜单
      • 菜单栏
      • 工具栏
      • 中间编辑区域
    • 代码添加其他组件
      • 字体和大小
      • 状态栏
    • 添加槽函数
      • UI设置的
      • 转到槽的
      • 手写的
      • 设置应用程序图标
  • 代码

新建项目

  1. MainWindow代码文件夹
  2. 主窗口为 (QMainWindow)

添加静态资源

  1. AppIcon.ico
  2. images下的所有图标

添加资源

项目名称->右键->add new->qt->qt resource file->名称随便写
生成一个xx.qrc文件

  • 前缀为 /
  • 等修改时,直接右键qrc文件->添加现有文件
  • images和Application.ico同目录

添加action

  • xx.ui文件
  • 下方有一个action editor工具栏
  • 位置:控件 - 试图 - action editor
  • 新建action*(第一个按钮)
1. 文本(显示的名字):新建
2. 对象名称:actNew
3. tooltip(光标在的提示):新建
4. checkabled:选中状态,比如选中为粗体,不选中则不是粗体
5. shortcut:快捷键  ctl+n

以此类推

添加菜单

右边mainwindow中有两个对象:menubar和statusbar 菜单栏和状态栏
菜单栏只有一个
工具栏toolbar可以有多个

1. windowTitle:混合方式设计主窗口

菜单栏

文件:新建、打开、分隔符、退出
编辑:剪切、赋值、粘贴、清空
格式:斜体、粗体、下划线
查看:工具栏、状态栏
帮助:关于

在xx.ui中,左上角有一个在这里输入
这里会在menubar下添加子对象

输入汉字:文件 
后回车
依次输入  文件、编辑、格式、查看、帮助

将预创建的action,选中拖到指定的菜单栏中,上面出现红线,鼠标出现加号即可
会在menubar下的子对象生成子对象

工具栏

窗口右键 - 添加工具栏

还是将action拖拽过去,出现红色竖线

中间编辑区域

QTextEditor

代码添加其他组件

字体和大小

QLabel
QSpinBox
QFontLambox

头文件

#include <QLabel>
#include <QSpinBox>
#include <QFontComboBox>

private:
    void initUI();//声明初始化UI的函数
    QLabel* labelCurFile;//状态栏的当前文件
    QSpinBox* spinFontSize;//工具栏 选择字体大小
    QFontComboBox* fCmbFont;//工具栏 字体选择下拉菜单

状态栏

添加槽函数

UI设置的

最下方有一个signals_slots editor工具栏,可以图形化设置

转到槽的

在下方action editer 选中一个action,右键转到槽
粗体、斜体、下划线 选择代bool参数的triggered(bool)

textEditor 右键转到槽,选中内容变化

手写的

设置应用程序图标

打开pro文件 尾部追加

RC_ICONS = AppIcon.ico

或者
ui中windowsIcon选择文件

代码

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QSpinBox>
#include <QFontComboBox>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    void initUI();
private slots:
    // 自定义槽函数
    void onSpinFontsizeValueChanged(int fontSize);
    void onFCmbFontCurrentIndexChanged(const QString& font);
    void on_actFontBold_triggered(bool checked);

    void on_actFontItalic_triggered(bool checked);

    void on_actFontUnderline_triggered(bool checked);

    void on_textEdit_selectionChanged();

    void on_textEdit_copyAvailable(bool b);

    void on_actToolbar_triggered(bool checked);

    void on_actStatusBar_triggered(bool checked);

    void on_actAbout_triggered();

private:
    Ui::MainWindow *ui;
    QLabel* labelCurFile;//状态栏的当前文件
    QSpinBox* spinFontsize;//工具栏 选择字体大小
    QFontComboBox* fCmbFont;//工具栏 字体选择下拉菜单
};
#endif // MAINWINDOW_H

.cpp

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget(ui->textEdit);//设置为主窗口的中心框架
    initUI();

    // 信号和槽函数的连接
    connect(spinFontsize,SIGNAL(valueChanged(int)), this, SLOT(onSpinFontsizeValueChanged(int)));//字体大小值变化
    connect(fCmbFont,SIGNAL(currentIndexChanged(QString)), this, SLOT(onFCmbFontCurrentIndexChanged(QString)));//字体当前编号变化
}

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

void MainWindow::initUI(){
    ui->actCut->setEnabled(false);
    ui->actCopy->setEnabled(false);
    ui->actPaste->setEnabled(false);

    // 状态栏上的label
    labelCurFile = new QLabel("当前文件:");
    labelCurFile->setMinimumWidth(350);
    ui->statusbar->addWidget(labelCurFile); // 添加到状态栏

    // 工具栏
    // 选择字体大小的选值框
    spinFontsize = new QSpinBox;
    spinFontsize->setRange(8,50); // 设置字号的取值范围
    spinFontsize->setValue(ui->textEdit->font().pointSize());
    spinFontsize->setMinimumWidth(50);
    spinFontsize->setMaximumWidth(80);
    // 选择字体的下拉列表
    fCmbFont = new QFontComboBox;
    fCmbFont->setMinimumWidth(150);
    // 将控件添加到工具栏
    ui->toolBar->addWidget(new QLabel("  字体大小:"));
    ui->toolBar->addWidget(spinFontsize);
    ui->toolBar->addWidget(new QLabel("  字体:"));
    ui->toolBar->addWidget(fCmbFont);

    ui->actToolbar->setChecked(true);
    ui->actStatusBar->setChecked(true);
}
// "粗体"
void MainWindow::on_actFontBold_triggered(bool checked)
{
    QTextCharFormat fmt;
    if(checked)
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(QFont::Normal);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// "斜体"
void MainWindow::on_actFontItalic_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt.setFontItalic(checked);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// "下划线"
void MainWindow::on_actFontUnderline_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt.setFontUnderline(checked);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// 更新 粗体、斜体、下滑线 三个按钮的 checked属性
void MainWindow::on_textEdit_selectionChanged()
{
    QTextCharFormat fmt;
    fmt = ui->textEdit->currentCharFormat();
    ui->actFontBold->setChecked(fmt.font().bold());   // "粗体"是否选中
    ui->actFontItalic->setChecked(fmt.fontItalic());  // "斜体"是否选中
    ui->actFontUnderline->setChecked(fmt.fontUnderline()); // "下划线"是否选中
    spinFontsize->setValue(ui->textEdit->currentFont().pointSize()); // 字号
    fCmbFont->setCurrentText(fmt.fontFamily()); // 字体
}
// 更新 cut、copy、paste的 enabled属性  释放可复制
void MainWindow::on_textEdit_copyAvailable(bool b)
{
    ui->actCut->setEnabled(b);
    ui->actCopy->setEnabled(b);
    ui->actPaste->setEnabled(ui->textEdit->canPaste());
}

void MainWindow::on_actToolbar_triggered(bool checked)
{
    ui->toolBar->setHidden(!checked);
}

void MainWindow::on_actStatusBar_triggered(bool checked)
{
    ui->statusbar->setHidden(!checked);
}

void MainWindow::on_actAbout_triggered()
{
    QMessageBox::about(this,"关于","版本:1.0\n版权所有:问问啧啧啧");
}
// 改变字体大小
void MainWindow::onSpinFontsizeValueChanged(int fontSize)
{
    QTextCharFormat fmt;
    fmt.setFontPointSize(fontSize);  // 设置字体大小
    ui->textEdit->mergeCurrentCharFormat(fmt);
}
// 选择字体
void MainWindow::onFCmbFontCurrentIndexChanged(const QString& fontFamily)
{
    QTextCharFormat fmt;
    fmt = ui->textEdit->currentCharFormat();
    fmt.setFontFamily(fontFamily);
    ui->textEdit->mergeCurrentCharFormat(fmt);

//    QFont font;
//    font.setPointSizeF(pointSize);
//    font.setWeight(weight);
//    font.setItalic(isItalic);
//    font.setUnderline(fmt.fontUnderline());
//    ui->textEdit->setCurrentFont(font);


//    fmt = ui->textEdit->currentCharFormat();
//    double pointSize = fmt.fontPointSize();//字号
//    int weight = fmt.fontWeight();//是否加粗
//    bool isItalic = fmt.fontItalic();//是否斜体
//    QFont font(fontFamily,int(pointSize),weight,isItalic);
//    font.setUnderline(fmt.fontUnderline());
//    ui->textEdit->setCurrentFont(font);

}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

冬日寄快递省钱指南!出门差点冷冷冷冷冷冷傻了……

最近这段时间的天气 可以说令人备受煎熬 真的很喜欢冬天 有种藏在冰窖里的感觉 我理想中的冬天&#xff1a; 火炉、山药、糖炒栗子 实际上的夏天&#xff1a; 上班、挤地铁、爆冷 有一说一 这天气再冷就不合适了吧 现在连出门拿快递 都让人开心不起来了 冬日寒风凛冽…

数据结构与算法-D8D9队列实现及应用

队列&#xff1a;限制在两端进行插入和删除的线性表 允许进行存入操作的一端为“队尾” 允许进行删除操作的一端为“队头” 顺序队列 注意&#xff1a;front指向队头元素的位置 rear指向队尾元素的下一个位置 实现循环队列&#xff1a;(rear1)%N取余&#xff0c;为了区分空…

迅为IMX6UL核心板在便携式医疗设备中的应用方案

在科技日益发展的今天&#xff0c;便携式医疗设备变得越来越受欢迎。这些小巧、轻便的设备&#xff0c;例如IMX6UL核心板&#xff0c;为医疗行业带来了巨大的变革。它们不仅便于携带&#xff0c;而且集成了多种功能&#xff0c;满足了人们对健康管理的各种需求。 便携式医疗设备…

Linux系统---基于Pipe实现一个简单Client-Server system

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、题目要求 Server是一个服务器进程&#xff0c;只能进行整数平方运算。Client要计算一个整数的平方的平方的平方&#xff0c;即…

如何在Linux本地部署openGauss开源数据管理系统并结合内网穿透公网访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

计算机毕业设计 基于Web的网上购物系统(pc端仿淘宝系统)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

3.vue学习笔记(条件渲染+列表渲染+通过key管理状态)

文章目录 1.条件渲染1.1. v-if1.2. v-else-if1.3. v-show1.4. v-if与v-show区别 2.列表渲染2.1. 复杂数据2.2. v-for与对象 3.通过key管理状态 1.条件渲染 在vue中&#xff0c;提供了条件渲染&#xff0c;这类似于JavaScript中的条件语句v-ifv-elsev-else-ifv-show1.1. v-if …

python中tkinter实现GUI程序:三个实例

python中tkinter实现GUI程序 写在最前面Python中使用Tkinter实现GUI程序的基本元素Tkinter简介基本元素1. 根窗口&#xff08;Root Window&#xff09;2. 小部件&#xff08;Widgets&#xff09;3. 布局管理4. 事件处理 1.用 tkinter实现一个简单的 GUI程序,单击“click”按钮&…

leetcode-21-合并两个有序链表(C语言实现)

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出…

Linux网络——高级IO

目录 一.五种IO模型 1.阻塞式IO 2.非阻塞式IO 3.信号驱动IO 4.多路转接IO&#xff1a; 5.异步IO 二.同步通信 vs 异步通信 三.设置非阻塞IO 1.阻塞 vs 非阻塞 2.非阻塞IO 3.实现函数SetNoBlock 四.I/O多路转接之select 1.初识select 2.select函数原型 3.socket就绪…

Python 学习笔记之 networkx 使用

介绍 networkx networkx 支持创建简单无向图、有向图和多重图&#xff1b;内置许多标准的图论算法&#xff0c;节点可为任意数据&#xff1b;支持任意的边值维度&#xff0c;功能丰富&#xff0c;简单易用 networkx 中的 Graph Graph 的定义 Graph 是用点和线来刻画离散事物…

【JAVA基础】----第一天

【JAVA基础】----第一天 命名规则注释方式对HelloWorld代码进行解释常量&#xff0c;进制转换和机器码展现计算过程常量类型1.字符串常量2.整数常量 提供了四种表现形式2.1 二进制2.2 八进制2.3 十进制2.4 十六进制2.5 进制之间的转化2.5.1 其他进制转化为十进制2.5.2 十进制转…

【算法优选】 动态规划之路径问题——贰

文章目录 &#x1f38b;前言&#x1f332;[下降最小路径和](https://leetcode.cn/problems/minimum-path-sum/)&#x1f6a9;题目描述&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现 &#x1f38d;[最小路径和](https://leetcode.cn/problems/minimum-path-sum/)&…

初识RabbitMQ

一、消息队列 1、消息队列的介绍 在介绍RabbitMQ之前&#xff0c;首先来介绍下消息队列。消息队列是生产者-消费者模型的一个典型的代表&#xff0c;由一端往消息队列中不断的写入消息&#xff0c;而另一端则可以读取或者订阅队列中的消息。当新的消息入队时&#xff0c;就会通…

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…

红队攻防实战之Redis-RCE集锦

心若有所向往&#xff0c;何惧道阻且长 Redis写入SSH公钥实现RCE 之前进行端口扫描时发现该机器开着6379&#xff0c;尝试Redis弱口令或未授权访问 尝试进行连接Redis&#xff0c;连接成功&#xff0c;存在未授权访问 尝试写入SSH公钥 设置redis的备份路径 设置保存文件名 …

透析跳跃游戏

关卡名 理解与贪心有关的高频问题 我会了✔️ 内容 1.理解跳跃游戏问题如何判断是否能到达终点 ✔️ 2.如果能到终点&#xff0c;如何确定最少跳跃次数 ✔️ 1. 跳跃游戏 leetCode 55 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。数组中的每个元素代表…

[MySQL]SQL优化之索引的使用规则

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引失效 &#x1f4d5;最左前缀法则 &#x1f4d5;范围查询> &#x1f4d5;索引列运算&#xff0c;索引失效 &#x1f4d5;前模糊匹配 &#x1f4d5;or连接的条件 &#x1f4d5;字符串类型不加 …

C语言中的一维数组与二维数组

目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建&#xff1f; int count…

计算机丢失msvcp140dll怎么恢复?快速解决dll缺失问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140dll丢失”。msvcp140.dll是一个动态链接库文件&#xff0c;它包含了许多C标准库函数的实现。这些动态链接库文件是程序运行所必需的&#xff0c;它们包含了许多函数和资源&#xf…