【无标题】Qt

一.样式表

1.1样式表的介绍

Qt样式表是一个可以自定义部件外观的强大机制,样式表的概念、术语、语法均受到HTML的层叠样式表(Cascading Style Sheets,CSS)的启发。
样式表可通过QApplication::setStyleSheet()函数将其设置到整个应用程序上,也可以使用QWidget::setStyleSheet()将其设置到指定的部件或子部件上,不同级别均可设置样式表,称为样式表的层叠。样式表也可通过设计模式编辑样式表。

1.2语法

QPushButton{color:red}
QPushButton是选择器;
{color:red}是声明;
color是属性;
red是值。
选择器{属性1:值1;属性2:值2;属性3:值3}

1.3选择器类型

hover表示css的伪类,即鼠标悬停在元素上时的样式,与之相反的是!hover

并且伪类有很多种,clicked也是且能同时使用,

如QCheckBox:hover:checked{color:white}---->这是逻辑与效果
QCheckBox:hover,checked{color:white}----->这是逻辑或效果

在这里插入图片描述

注意冲突问题的解决:
当几个样式规则对相同指定不同的值时会发生冲突,如:
QPushButton#okButton{color:gray}
QPushButton{color:red}
这时候的原则就是:特殊的选择器优先,此例中QPushButton#okButton代表的是单一对象,而不是一个类的所有实例,所以okButton的文本颜色会是灰色的。同样的有伪状态的比没有伪状态的优先。

QPalette调色板

定义:

Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。

实例:

QColor color;
Qpalette p=m_contens->palette();
p->setColor(QPaletteL::Window,color);
**m_contens->setPalette§;

在构造函数里就直接是setPalette();

Qt里的三个不同的信号事件:

1:clicked()是按钮被按下
2:triggered()是QActive被触发
3:activated()是combox里的项被激活

设置风格也有一个坑如果自己就是父类的话SetWindowFlags(Qt::Tool)就是能直接成功的,但是如果我这个类是继承于父类,子类的风格设计权是被父类控制着,如果要设置的话就必须要setWindowFlags(windowFlags() | Qt::Tool),先用windowFlags()获取自己的风格再进行设计

在Qt中,abort() 是一个用于终止程序运行的函数。当调用 abort() 函数时,程序会立即终止执行,并生成一个崩溃报告。这个函数通常在遇到严重错误或者不可恢复的情况下使用,用于提前结束程序的运行。

使用QAnimationGroup类可以实现复杂的动画,它的两个子类QSequentialAnimationGroup和QParalleAnimationGroup分别提供了串行动画组合并行动画组。

画图用的是QGraphicsScene这是主场景,其中的小物件类用的是QGraphicsObject,通过scene->addItem(object)进行交互,同时还得定义个视图类,叫QGraphicsView,提供了一个用于显示和交互的可视化区域,允许用户以图形化的方式查看和操作场景中的图形项。QGraphicsView 是 Qt 中用于显示和交互 QGraphicsScene 中图形项的重要部件,它为用户提供了一个可视化的界面来操作和查看场景中的图形内容。QGraphicsItem是QGraphicsObject的父类。

动画类用QPropertyAnimation,举例就是 QPropertyAnimation *fadeAnimation = new QPropertyAnimation(btnItem,“opacity”,m_lettersGroupFading);同时“opacity”就是表明渐渐消失的动画,这里fadeAnimation->setEndValue(0)表示最后将透明度设为0,这里参数二改为pos就是移动位置动画fadeAnimation->setEndValue(0)这里表示最后将位置移动到0的位置,geometry表示对几何信息进行处理。同时fadeAnimation->setEndValue(0)是对将几何信息设为0;

图形视图框架中有3个有效的坐标系统:图形项坐标、场景坐标、视图坐标

图形项坐标:你运行QGraphicsScene的话,场景的项QGraphicsItem是以自己中心为坐标原点的,如自由小鸟项目里,小鸟在飞的时候的坐标是以鸟自己中心为原点,且设置的不能飞过-180的坐标。
场景坐标:场景坐标是所有图形项的基础坐标系统,坐标的原点在场景的中心。
视图坐标:QGraphicsView的左上角,且所有的鼠标事件事件和拖放事件都是使用视图坐标来接收的。

QGraphicsItem的使用

##在这里插入图片描述

注意:视图的所有事件都是由视图进行接收,然后传递给背景,再由背景传递给响应的图形项

还有个类叫QGraphicsProxyWidget是专门用来显示常规的 QWidget 的机制,它允许将常规的 QWidget 嵌入到图形场景中,以图形项的形式显示和管理,而QGraphicsItem和其之类QGraphicsObject是显示图形元素的基本单位。它可以表示各种类型的图形元素,如矩形、椭圆、文本、路径。

Qt的事件中,mousePressEvent是QMouseEvent,keyPressEvent是QKeyEvent,同时,在mousePressEvent中,要区分button和buttons, button是获取鼠标事件中的单个按钮信息,返回别按下或释放的鼠标按钮,而buttons是获取鼠标事件中所有按下的按钮,返回一个组合值,但是判断事件是event->button==Qt::LeftButton,同时注意Qt::Key_Left是键盘的左键而不是鼠标的左键,要区分。keyPressEvent的按下查看是event->key()==Qt::Key_Space

qApp->widgetAt(event->pos())一个Qt库提供的方法,用于获取位于特定位置的部件(widget)。event->pos() 来获取鼠标事件发生的位置,并通过调用 qApp->widgetAt() 方法来获取该位置上的部件。qApp->widgetAt(event->pos()) == ui.pushButton可以限制事件发生的范围。

QLatin1String是对const char的一层薄封装,可以避免将const char转化为QString,避免不必要的内存开销,因为很多的api接口函数的默认是QString,而你传入字符串时如"abc"是const char*类型,会有一个隐式的类型转换,且在qt里是QChar是两个字节,所以QString是16个字节,所以会有从utf-8转换到utf-16的字符编码转换过程。

QStringLiteral是在编译器产生的,是一个宏。在有时候函数只接收QString类型是,就不能用QLatin1String了,是将字符串常量创建一个QString的宏,所以是在编译器产生,其实是一个临时的QString对象,运行时就不会产生任何的内存分配和转换了,当然如果要求的是一个QString类型可能会发生改变同时不接受const char*时就得老老实实用QString了

Vs用的是GBK的编码格式,只能在window下显示中文。Qt是uft-8的编码格式,在winodw和linux下都可以显示中文,要让uft-8格式的Qt文件在vs中能显示中文,得用QString::fromlocal8Bit或者#pragma execution_character_set(“utf-8”),且不能一起用。

这里区分一下各种编码格式,unicode字符集是针对字符串的国际标准字符集,而utf-8和utf-16等等这些才是真正的字符编码规则

Qt的QFile file(fileName),注意这里的fileName如果开头是"😕"是只读方式打开,如果是要以写的方式打开,只能去掉:/

Qt里类加入ui界面有两种方式,Qt creator常用这种:

namespace Ui {
class Researchers;
}
Ui::Researchers* ui;这是用指针方式来实例化该ui界面

第二种是在Vs里,

#include “ui_Administrations.h”
Ui::AdministrationsClass ui;声明头文件并加个class来实例化,不是指针

在这里插入图片描述

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值