1、混合方式UI设计

news2024/12/26 22:04:12

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.coloradmin.cn/o/1302830.html

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

相关文章

【MATLAB】基于CEEMDAN分解的信号去噪算法(基础版)

代码的使用说明 【MATLAB】基于CEEMDAN分解的信号去噪算法&#xff08;基础版&#xff09; 代码流程图 代码效果图 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复CEEMDAN去噪 本公众号致力于解决找代码难&#xff0c;…

【C++】POCO学习总结(十二):流(文本编解码、数据压缩、文件读写流等)

【C】郭老二博文之&#xff1a;C目录 1、说明 POCO提供了多种流类&#xff0c;与标准c IOStreams兼容。 大多数POCO流类被实现为过滤器&#xff0c;这意味着它们不写入或读取设备&#xff0c;而是从它们连接的另一个流。 2、文本编解码 2.1 说明 POCO提供了用于编码和解码…

苹果文本动态高亮,滚动时候部分高亮不显示问题

很简单的需求&#xff1a; 一个文本容器固定大小&#xff0c;内容超出滚动&#xff0c;然后文本点击高亮&#xff0c;奇怪就是苹果微信打开会出现点击只会高亮能看见的区域文本&#xff0c;滚动部分不会显示&#xff0c;默认浏览器打开也不行&#xff0c;安卓没问题&#xff0…

10.RIP路由信息协议

10.RIP 网段经常产生变化的话&#xff0c;建议使用动态路由协议&#xff0c;当网段发生变化的时候会自动通告给其他路由器 它不看链路的带宽&#xff0c;只看链路中的跳数&#xff0c;只要是跳数多的&#xff0c;不管带宽有多大&#xff0c;它就认为是不好的 RIP跳数有限 …

外包干了3个月,技术退步明显。。。

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

第三节、项目支付功能实战-微信支付平台接入流程,小程序账号注册、商户注册

简介 本篇介绍小程序的注册流程、商户平台的注册流程、以及小程序和商户平台如何进行绑定。 微信小程序注册 由于项目中使用了小程序进行支付&#xff0c;所以首先来注册小程序。小程序注册网站如下&#xff1a;小程序注册地址 小程序账号注册 1、链接页面点击“前往注册”…

事务的四个特性、四个隔离级别以及数据库的常用锁

事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性&#xff0c;通常被称为ACID特性&#xff0c;是数据库管理系统&#xff08;DBMS&#xff09;确保事务处理的关键属性。这四大特性分别是&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#x…

银河麒麟v10系统SSH远程管理及切换root用户的操作方法

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一…

Python基础期末复习 新手 2

虽然age 10在__init__方法中定义了一个局部变量age&#xff0c;但这个局部变量并不会影响类属性age的值。类属性是在类级别上定义的&#xff0c;不属于任何一个实例。因此&#xff0c;在创建实例s1和s2时&#xff0c;它们的age属性值都为类属性的初始值0。 尽管对类的属性值进…

1.鸿蒙应用程序开发app_hap开发环境搭建

1.下载Node.js, Javascipts的运行环境 node.js版本下载v12.18.3/https://www.cnblogs.com/txwtech/p/17865780.html 2.下载并安装DevEco Studio DevEco Studio 3.1 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发&#xff0c;提供了代码智能编辑、低代…

coding创建远程分支。并拉取远程新分支+推送代码

进入coding ----项目----代码仓库---点击 下拉之后查看全部----创建分支 创建分支之后执行下面命令 git branch -a // 查看所有分支 这个时候发现自己创建的分支没有显示这是因为自己在远程创建了分支但是本地还没有分支 执行 git fetch命令 用于从远程仓库获取最新的提交…

day33-37-SpringBootV12(整合Spring,SpringMVC,Mybatis,日志,api测试等框架)

ssm spring --> applicationContext.xml配置文件 springmvc --> springmvc.xml配置文件 mybatis —> mybatis-config.xml配置文件 —> springboot优化了之前的框架配置,思想是约定大于配置 一、引言 1.1 初始化配置 为了使用SSM框架去开发&#xff0c;准备SSM…

SpringBootWeb请求响应之前言及状态码的详细解析

SpringBootWeb请求响应 前言 在上一次的课程中&#xff0c;我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 其实呢&#xff0c;是我们在浏览器发起请求…

孩子还是有一颗网安梦——Bandit通关教程:Level0

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

JAVA定时任务技术总结

在日常的项目开发中&#xff0c;多多少少都会涉及到一些定时任务的需求。例如每分钟扫描超时支付的订单&#xff0c;每小时清理一次数据库历史数据&#xff0c;每天统计前一天的数据并生成报表&#xff0c;定时去扫描某个表的异常信息&#xff08;最终一致性的方案也可能涉及&a…

五.单行函数

单行函数 1.函数的理解1.1什么是函数1.2不同DBMS函数的差异1.3MySQL的内置函数分类 2.数值函数2.1基本函数2.2角度与弧度互换函数2.3三角函数2.4指数与对数2.5进制间的转换 3.字符串函数4.日期和时间函数4.1获取日期、时间4.2日期与时间戳的转换4.3获取月份、星期、星期数、天数…

CentOS上配置和管理HTTP服务器的工具和实用程序

在CentOS系统上&#xff0c;有多个工具和实用程序可以帮助你配置和管理HTTP服务器。以下是一些常用的工具和实用程序&#xff1a; Apache HTTP服务器&#xff1a; Apache是CentOS上最常用的HTTP服务器之一。它是一个开源的Web服务器软件&#xff0c;具有高度的可配置性和可扩…

西工大网络空间安全学院计算机系统基础实验二(phase_2上——死寂的长夜)

自从西工大网络空间安全学院计算机系统基础实验二&#xff08;清楚实验框架及phase_1&#xff09;-CSDN博客这篇文章之后&#xff0c;我们获取了phase_1的答案字符串&#xff0c;如 图1&#xff1a;phase_1的答案字符串 所示&#xff0c;注意每个人的答案字符串可能都不一样。接…

将程序注册为系统服务

cmd中执行命令&#xff1a; sc create Redis binpath "C:\guet_run1\Redis-x64-5.0.14.1\redis-server.exe" type own start auto displayname "Redis"注意&#xff0c;命令中所有的等号和值之间需要一个空格&#xff08;等号前不要空格&#xff0c;等号后…

论文怎么改才能降低重复率

一、引言&#xff1a;智能工具助力&#xff0c;轻松降低论文重复率 论文的重复率是学术写作中的重要问题&#xff0c;如何有效降低重复率成为了许多研究者的关注焦点。如今&#xff0c;智能工具的发展为我们提供了更多选择。本文将介绍几种实用的智能工具&#xff0c;包括快码…