Qt 混合方式UI设计

Qt6 案例实战编程(二)代码化UI设计 在头文件中,我们需要写入什么信息呢?当然,我们需要定义所需要的变量,并且对所要用到的函数进行声明。这篇笔记可以作为笔记(一)的一个补充,笔记(一)主要使用可视化UI完成项目的建立,这篇笔记则是用纯代码的方式建立与之相类似的程序和功能。在头文件dialog.h中我们只是定义了三个属于QCheckBox的指针,但是还未对其做规定,所以我们需要在初始化时对他们做相应的用法规定。和本人在Qt6 案例实战编程(一)中所要实现的功能类似,还是可以写入文本,对文本的字体和颜色进行修改,并且可以进行确定、取消和退出操作。 阅读详情

之前了解了可视化UI设计和代码UI设计,各有优点吧,可以将这两种方式进行混合。

下面举例进行深入体验:

整体思想就是先进行可视化设计,实在不能添加的组件再选择用编码的形式添加。

先学一下怎么创建资源文件:

菜单和工具栏的设计功能需要用Action实现,如下图

每行内容都是通过下面表格内容填写实现的:

 菜单栏编辑:如下图,先将主菜单确定

菜单项: 主菜单分组完成后,从Action编辑器中拖动到主菜单某个分组上,就可以创建菜单项

 分割条:双击“添加分隔符”

 

工具栏也是同样的方法:

 工具栏按钮显示方式可以更改:

 出现问题:现在运行没有显示工具栏的图标

问题解决:

 

解决方法:在Action编辑添加图标时选择资源而不是选择文件解决。

 

工具栏也有个弊端:将SpinBox、FontComboBox等组件拖到工具栏会被拒收,这是UI设计器的局限性,某些界面效果无法用可视化设计方式实现。所以转为代码实现:

头文件里这样编辑:

#ifndef QWMAINWIND_H
#define QWMAINWIND_H

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

QT_BEGIN_NAMESPACE
namespace Ui { class QWMainWind; }
QT_END_NAMESPACE

class QWMainWind : public QMainWindow
{
    Q_OBJECT

public:
    QWMainWind(QWidget *parent = nullptr);
    ~QWMainWind();

private:
    Ui::QWMainWind *ui;
    QLabel *flabCurFile;   //状态栏里显示当前文件的Label
    QProgressBar *progressBar1;//状态栏上的进度条
    QSpinBox *spinFontSize;//字体大小 spinBox
    QFontComboBox *comboFont;//字体名称 comboBox
    void iniUI();
};
#endif // QWMAINWIND_H

实现代码.cpp内容如下:

#include "qwmainwind.h"
#include "ui_qwmainwind.h"

QWMainWind::QWMainWind(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::QWMainWind)
{
    ui->setupUi(this);
    iniUI();
    iniSignalSlots();
}

QWMainWind::~QWMainWind()
{
    delete ui;
}
void QWMainWind::iniUI()
{
    //状态栏添加组件
    flabCurFile=new QLabel;
    flabCurFile->setMinimumWidth(150);
    flabCurFile->setText("当前文件:");
    ui->statusBar->addWidget(flabCurFile);//添加到状态栏

    progressBar1=new QProgressBar;
    progressBar1->setMaximumWidth(200);
    progressBar1->setMinimum(5);
    progressBar1->setMaximum(50);
    progressBar1->setValue(ui->txtEdit->font().pointSize());
    ui->statusBar->addWidget(progressBar1);  //添加到状态栏

    //工具栏上添加组件
    spinFontSize=new QSpinBox;// 文字大小 SpinBox
    spinFontSize->setMinimum(5);
    spinFontSize->setMaximum(50);
    spinFontSize->setValue(ui->txtEdit->font().pointSize());
    spinFontSize->setMinimumWidth(50);
    ui->toolBar->addWidget(new QLabel("字体大小"));
    ui->toolBar->addWidget(spinFontSize);//SpinBox添加到工具栏

    ui->toolBar->addSeparator();//分隔条
    ui->toolBar->addWidget(new QLabel("字体"));
    comboFont=new QFontComboBox;
    comboFont->setMinimumWidth(150);
    ui->toolBar->addWidget(comboFont);//添加到工具栏

    setCentralWidget(ui->txtEdit);
}

void QWMainWind::iniSignalSlots()
{
    //信号与槽的关联
    connect(spinFontSize,SIGNAL(valueChanged(int)),this,SLOT(on_spinBoxFontSize_valueChanged(int)));
    connect(comboFont,SIGNAL(currentIndexChanged(const QString &)),this,SLOT(on_comboFont_currentIndexChanged(const QString &)));
}


void QWMainWind::on_actFontBold_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat();
    if(checked)
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(QFont::Normal);
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}

void QWMainWind::on_txtEdit_copyAvailable(bool b)
{
    //更新cut copy paste 的enable属性
    ui->actCut->setEnabled(b);
    ui->actCopy->setEnabled(b);
    ui->actPaste->setEnabled(ui->txtEdit->canPaste());
}

void QWMainWind::on_txtEdit_selectionChanged()
{
    //更新粗体、斜体、下划线3种action的checked属性
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat();   //获取文字的格式
    ui->actFontItalic->setChecked(fmt.fontItalic());  //是否斜体
    ui->actFontBold->setChecked(fmt.font().bold());  //是否粗体
    ui->actFontUnder->setChecked(fmt.fontUnderline()); //是否有下划线
}

void QWMainWind::on_spinBoxFontSize_valueChanged(int aFontSize)
{
    //改变字体大小的SpinBox
    QTextCharFormat fmt;
    fmt.setFontPointSize(aFontSize);   //设置字体大小
    ui->txtEdit->mergeCurrentCharFormat(fmt);
    progressBar1->setValue(aFontSize);
}

void QWMainWind::on_comboFont_currentIndexChanged(const QString &arg1)
{
    //FontCombobox的响应,选择字体名称
    QTextCharFormat fmt;
    fmt.setFontFamily(arg1);   //设置字体大小
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}


写完函数声明、函数内容后,需要在构造函数里实现。

为应用程序设置图标:

1、将一个图标文件(必须是 ".ico" 后缀的图标文件)复制到项目源程序目录下。

2、在项目配置文件里用RC_ICONS设置图标文件名,添加一行代码。 

 

day04(Qt)UI设计 UI设计 阅读详情

相关推荐

第七章节 Qt的UI界面设计详解

1)剪贴、拷贝、粘贴的 enable 属性,能够自动的变化: 当编辑器没有选择文本的时候,剪切、拷贝工具最好不能使用(灰色状态) 当编辑器已经选择文本的时候,剪切、拷贝工具能使用(正常状态), 当剪贴板中没有东西可以粘贴进文本编辑器时,粘贴工具最好不能使用。2)下划线工具,斜体工具,粗体工具的复选状态,能够自动变化。还有一些 Action(新建、打开、粗体、斜体等)所需要的槽函数,接受者控件本身没有对应 的方法,就需要生成新的槽函数。用代码创建的组件(字体大小,字体选择),它们的信号槽只能通过代码来实现。

m0_65635427的博客 2576

Qt入门 【ui设计】

Qt

m0_53421868的博客 4055

QT编程从入门到精通之二十六:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.1 混合设计概述”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4混合方式UI设计;5.4.1 混合设计概述

LuckyHanMo的博客 527

Qt 可视化Ui设计

QMainWindow 是主窗口类,主窗口类具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口; QWidget是所有具有可视界面类的基类,选择QWidget创建的界面对各种界面组件都可以支持; QDialog是对话框类,可建立一个基于对话框的界面。 新建项目:Application->Qt Widgets Application 新建项目里面的文件有哪些: 项目管理文件:.pro 存储项目设置的文件 主程序入口文件: main.cpp 实现main(...

GiGi_Princess的博客 2万+

QT编程从入门到精通之二十九:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.4 设计菜单和工具栏”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4 混合方式UI设计;5.4.4 设计菜单和工具栏

LuckyHanMo的博客 584

QT编程从入门到精通之二十七:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.2 创建项目并添加资源文件”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4 混合方式UI设计;5.4.2 创建项目并添加资源文件

LuckyHanMo的博客 786

《Qt 5.9 C++开发指南》第2.4节 混合方式UI设计

2.4 混合方式UI设计 2.4.1 设计目的 【本节实例项目samp2_4完整代码下载地址】https://download.youkuaiyun.com/download/hongandyi/10424216 可视化UI设计无需人工编写代码去处理大量繁琐的界面组件的创建和布局管理,可以直观地进行界面设计,可以大大地提高工作效率。但是可视化UI设计也有一些缺陷,例如某些组件无法可视化的添加到界面上,比如在工具栏上无法可视化添加ComboBox组件,而用代码就可以。 采用纯代码方式进行UI设计虽然无所不能,但是

好习惯成就伟大 1248

QT编程从入门到精通之三十三:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.8 为应用程序设置图标”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4 混合方式UI设计;5.4.8 为应用程序设置图标

LuckyHanMo的博客 505

Qt:混合方式 UI 设计

1、创建项目并添加资源文件 (1)创建一个 Widget Application 项目,在向导的创建窗口类时,选择基类 QMainWindow,新建 类的名称设置为 QWMainWind,并选择生成窗体。 (2)添加资源文件:用来存储菜单和工具栏的图标和图片文件。 在 Qt Creator 里单击“File”→“New File or Project…”----&gt;"Files and ...

OceanStar的博客 2997

QT编程从入门到精通之三十二:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.7 手工创建的组件的信号与槽”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4 混合方式UI设计;5.4.7 手工创建的组件的信号与槽

LuckyHanMo的博客 1181

QT编程从入门到精通之三十:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.5 代码创建其他界面组件”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4 混合方式UI设计;5.4.5 代码创建其他界面组件

LuckyHanMo的博客 762

Qt 5.9 C++开发指南2——混合方式UI设计

混合方式UI设计

qq_42832272的博客 820

QT编程从入门到精通之二十八:“第五章:Qt GUI应用程序设计”之“5.4 混合方式UI设计”之“5.4.3 设计Action”

QT编程;从入门到精通;第五章:Qt GUI应用程序设计;5.4 混合方式UI设计;5.4.3 设计Action

LuckyHanMo的博客 627

《Qt 5.9 C++开发指南》第2.4节 混合方式UI设计【完整版】

2.4 混合方式UI设计2.4.1 设计目的可视化UI设计无需人工编写代码去处理大量繁琐的界面组件的创建和布局管理,可以直观地进行界面设计,可以大大地提高工作效率。但是可视化UI设计也有一些缺陷,例如某些组件无法可视化的添加到界面上,比如在工具栏上无法可视化添加ComboBox组件,而用代码就可以。采用纯代码方式进行UI设计虽然无所不能,但是设计效率太低,过程非常繁琐,而可视化UI设计简单高效。所...

HongAndYi的博客 3711

1、混合方式UI设计

项目名称->右键->add new->qt->qt resource file->名称随便写。右边mainwindow中有两个对象:menubar和statusbar 菜单栏和状态栏。将预创建的action,选中拖到指定的菜单栏中,上面出现红线,鼠标出现加号即可。在下方action editer 选中一个action,右键转到槽。在xx.ui中,左上角有一个在这里输入。会在menubar下的子对象生成子对象。文件:新建、打开、分隔符、退出。编辑:剪切、赋值、粘贴、清空。格式:斜体、粗体、下划线。

Salted fish in hand, I have the world. 1252

从零开始:用Kimi API和LangChain打造智能写作助手

本文详细介绍了如何从零开始,利用Kimi API提供的强大AI大模型能力,结合LangChain框架构建一个智能写作助手。通过实战演示了环境搭建、核心写作链构建、以及引入检索增强生成和智能体等进阶功能,旨在解决长文档创作、事实准确性等痛点,打造一个能理解意图、调用工具并保持记忆的智能创作伙伴。

weixin_29294395的博客 138

2_可视化ui设置

直接通过desinger设置的ui,用于灵活性不高的项目[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BO9BXAbU-1671093783238)(可视化ui设置.assets/2022-08-01 10-04-24 的屏幕截图.png)]

Th34ki的博客 364

GEE:面对对象土地利用分类(结合SNIC、GLCM 和机器学习算法)

本文将介绍在Google Earth Engine中结合SNIC、GLCM和机器学习算法的的土地利用/土地覆盖(LULC)分类方法。结果如下图所示,

养乐多的博客 5616

QT第二天

混合方式设计UI 资源文件导入 设计Action 设计菜单和工具栏 代码创建其他界面组件 QLabel *flabCurFile;//状态栏显示当前文件的Label QProgressBar *progressBar1;//状态栏上的进度条 QSpinBox *spinFontSize;//字体大小spinBox QFontComboBox *comboFont;...

theRookie1的博客 450

28、基准剂量法:原理、应用与计算详解

本文详细介绍了基准剂量法(BMD)的原理、在监管机构中的应用以及具体的计算方法。内容涵盖样本量与BMD的关系、主要监管机构如EPA对BMD的应用、BMD的模型选择与数据拟合过程、拟合优度评估、下置信限(BMDL)计算,以及实验设计对BMD结果的影响。同时,还讨论了剂量指标和响应选择的关键问题,为理解和应用基准剂量法提供了全面的参考。

info6的博客 280

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 569

Qt的UI界面设计详解

一、开发UI界面的方式1、使用界面设计器实现界面:2、使用代码实现界面3、混合方式实现界面二、使用代码实现界面1、设计界面2、创建项目3、添加组件的指针变量4、初始化组件5、添加槽函数并初始化信号槽6、实现槽函数三、使用界面设计器实现界面1、拖放控件实现粗略布局2、使用布局组件实现优化3、添加信号与槽4、实现槽函数四、混合编程1、设计UI2、创建项目3、添加项目资源4、可视化菜单设计5、可视化工具栏设计6、混合编程(文本编辑器)7、混合编程:状态栏和工具栏。

weixin_46575013的博客 3016

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4137
上一篇: Qt 运行时不显示图标
下一篇: Qt 中SQLite数据库下载
Gigi Princess
博客等级 码龄5年 62粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值