Qt——界面优化

目录

QSS

基本语法

QSS 设置方式

指定控件样式设置

全局样式设置

文件加载样式表

Qt Designer 编辑样式

选择器

子控件选择器

伪类选择器

样式属性

盒模型

控件样式

按钮

复选框

单选框

输入框

列表

菜单栏

登录界面

绘图

概念

绘制形状

绘制线段

绘制矩形

绘制圆形

绘制文本

设置画笔

设置画刷

绘制图片

绘制简单图片

旋转图片


QSS

        在网页前端开发中,CSS是一个很重要的部分,用来描述一个网页的样式,从而起到对网页的美化作用,而 Qt 作为客户端的GUI开发,界面好看也是一个很重要的因素。

        Qt 仿照 CSS 的模式引入了 QSS 对控件做出样式上的设定,从而使界面更好看。

        Qt 与网页不一样,因此 QSS 中只能支持部分 CSS 属性。

【注意】:有时候同时通过 QSS 和 C++代码设置的样式,两者出现冲突,那么 QSS 的优先级更高。

基本语法

        这是CSS的语法结构:

选择器 
{属性名: 属性值;
}

        QSS 沿用了这种设定:

  • 选择器:哪个widget要应用样式规则。
  • 属性:一个键值对,属性名表示要设置哪种样式,属性值表示要设置的值。

QSS 设置方式

指定控件样式设置

        写一段简单的代码演示一下。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton->setStyleSheet("QPushButton { color: #0000ff; }"); // 将按钮的字体设置为蓝色
}

        可以看到只有一个按钮的字体被设置成蓝色了,所以这样设置只能对当前选择的控件和其子控件进行设置,什么是子控件呢,我们换一种方式。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setStyleSheet("QPushButton { color: #0000ff; }"); // 将按钮的字体设置为蓝色
}

        这里使用this只设置了按钮的字体颜色,两个按钮都是this的子控件,所以都被设置成了蓝色,如果不是QPushButton,那就不会生效。

全局样式设置

        全局的样式设置通过main.cpp文件中的 QApplication 的setStyleSheet 方法设置整个程序的全局样式。

int main(int argc, char *argv[])
{QApplication a(argc, argv);a.setStyleSheet("QPushButton { color: red; }");Widget w;w.show();return a.exec();
}

        这样就设置了全局样式,如果此时再将第一个按钮的字体设置成蓝色,并且把字体也设置为50px会怎么样呢?

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton->setStyleSheet("QPushButton { color: #0000ff; \font-size: 50px; }");
}

        此时这两个样式会叠加起来,这就是层叠性,CSS 为层叠样式表,QSS 也继承了层叠性。

        而且上面的示例也表明了如果出现全局和指定样式冲突,还是局部的样式优先级更高。  

文件加载样式表

        上述的代码都是 QSS代码 和 C++代码 混在一起的,如果 QSS 样式代码很简单,那就无所谓了,那要是 QSS 样式代码很复杂,那代码的维护成本就很高,也可以把 QSS 代码单独放在一个文件中,从文件中加载样式表,如何操作呢,还是使用qrc文件。

        创建好qrc文件后,就添加一个文件夹,里面创建一个文件,并修改一下文件名,后缀为qss。

        创建好后就在文件中编辑一些控件的样式。

        编写好后就返回main.cpp文件,通过QFile打开这个文件。

#include <QFile>QString loadQSS() {QFile file(":/QSS/style.qss");file.open(QFile::ReadOnly);QString style = file.readAll();file.close();return style;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);// 设置全局样式a.setStyleSheet(loadQSS());Widget w;w.show();return a.exec();
}

        通过这样的方式也可以设置控件的样式,让 QSS代码 和 C++代码 进行了解耦,但是这种方式也仅供参考,下面还有一种方式。

Qt Designer 编辑样式

        前面我们也简单提到过这种方式,在 Qt Designer 中,右击控件就可以编辑样式,然后就会把代码添加到ui文件中。

        当我们编辑完qss代码后,左下角也可以帮我们简单检查这个代码有没有问题。

        并且可以实时看到界面的变化,在ui文件中就会多了一段代码。


选择器

        在这里给出 QSS 几种常用的选择器:

选择器示例说明
类型选择器QPushButton { }选择所有的 QPushButton控件 及其子控件。
类选择器.QPushButton { }选择所有的 QPushButton控件,不包括子类。
ID 选择器#pushButton { }选择 objectName 为 pushButton 的控件。
并集选择器QPushButton, QLineEdit { }选择这几种,改变这几种控件的样式。

        简单演示一下。

        第一个设置了所有的QPushButton及其子类控件的颜色和字体,后面单独设置了下面两个控件的颜色,冲突的还是局部样式的优先级更高,不冲突的样式就会叠加。

        再看一下并集选择器。

        而且并集选择中既可以写控件名,也可以写objectName。

子控件选择器

        有些控件会包含一些子控件,比如 QSpinBox 的微调按钮和 QComboBox 的下拉框按钮。

        这些控件也是可以改变样式的,通过子控件选择器::,可以针对上述子控件进行样式设置,可以在手册中的这里查找。

int main(int argc, char *argv[])
{QApplication a(argc, argv);QString style = "QComboBox::down-arrow { image: url(:/image/down.png)}";style += "QSpinBox::down-button { image: url(:/image/down.png)}";style += "QSpinBox::up-button { image: url(:/image/up.png)}";a.setStyleSheet(style);Widget w;w.show();return a.exec();
}

伪类选择器

        伪类选择器是根据控件所处的某个状态被选择的,例如按钮被按下,输入框获取焦点,鼠标移动到某个控件上。

  • 当状态具备时,控件被选中,样式生效。
  • 当状态不具备时,控件不被选中,样式失效。

        常用的伪类选择器:

伪类选择器说明
:hover鼠标放到控件上
:pressed
鼠标左键按下时
:focus
获取输入焦点时
:enabled
元素处于可用状态时
:checked
被勾选时
:read-only
元素为只读状态时

        这些状态可以使用 ! 来取反,比如 :!hover 为鼠标离开控件时,:!pressed就是鼠标松开时,想要知道更多的伪类选择器就要查看文档了。

        现在就可以简单的设置一下。

        设置好后,运行程序就可以发现,按钮初始时红色,当鼠标移动到控件上时变成了绿色,当按下不松开时变成了蓝色。


样式属性

        QSS的属性非常多,也不需要刻意去记,用到去查文档就可以,下面我们主要提到一个术语为“盒模型”(Box Model)。

盒模型

        在文档中也介绍了盒模型。

  • Content 区域:存放控件内容,包含文件的文本、图标等。
  • Border 框:控件的边框。
  • Padding 区域:内边距,边框和内容的距离。
  • Margin 区域:外边距,边框到控件geometry返回的矩形边界距离。

        默认情况下,外边距、内边距和边框宽度都是0。也可以通过 QSS 来设置这些样式。

QSS 属性说明
margin
设置四个外边距
padding
设置四个内边距
border-style
设置边框样式
border-width
边框的粗细
border-color
边框的颜色
border
相当于上面三个属性集合,顺序为:border-width border-style border-color

// margin 可以拆成4个属性
margin-top:
margin-right:
margin-bottom:
margin-left:// 设置方式
margin: 10px; // 四个方向都是10px外边距
margin: 10px 20px; // 上下都是10px,左右都是20px
margin: 10px 20px 30px 40px; // 上右下左(顺时针)方向依次设置// padding 也是这样的

        设置 Label 的边距为5px,样式为solid实线,颜色为红色。外边距的设置也是差不多的。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* button = new QPushButton("按钮", this);button->setGeometry(0, 0, 100, 100);button->setStyleSheet("QPushButton{ border: 5px solid red; margin: 20px }");}


控件样式

        下面我们就来看一看常见的控件的样式。

按钮

        这个按钮设置了font-size字体大小,border边框,还有border-radius切角矩形,这个值越大,角就越圆,还有背景颜色,颜色可以直接点击添加颜色选择,会直接生成一个rgb(255, 255, 255)样式的值。

复选框

属性说明
::indicator
选中 checkbox 中的对钩部分
:hover
选中 鼠标进入 的状态
:pressed
选中 鼠标按下 的状态
:checked
选中 checkBox 被选中的状态
:unchecked
选中 checkBox 未被选中的状态
width
设置子控件宽度
height
设置子控件高度
image
设置子控件的图片

       可以自己找一些图片,我们想要实现的功能是:黑色复选框为默认情况下的样式,蓝色复选框为鼠标进入的样式,红色复选框为鼠标点击时的样式。

QCheckBox{font-size: 20px;
}QCheckBox::indicator{width: 20px;height: 20px;
}QCheckBox::indicator:unchecked{image: url(:/image/checkBox-unchecked.png);
}QCheckBox::indicator:checked{image: url(:/image/checkBox-checked.png)
}QCheckBox::indicator:unchecked:hover{image: url(:/image/checkBox-hover_unchecked.png)
}QCheckBox::indicator:checked:hover{image: url(:/image/checkBox-hover_checked.png)
}QCheckBox::indicator:unchecked:pressed{image: url(:/image/checkBox-pressed_unchecked.png)
}QCheckBox::indicator:checked:pressed{image: url(:/image/checkBox-pressed_checked.png)
}

单选框

        这里的操作和复选框差不多,都是在不同的选择器下有不同的样式。

QRadioButton{font-size: 30px;
}QRadioButton::indicator{width: 30px;height: 30px;
}QRadioButton::indicator:unchecked{image: url(:/image/radioButton-unchecked.png)
}QRadioButton::indicator:unchecked:hover{image: url(:/image/radioButton-unchecked-hover.png)
}QRadioButton::indicator:unchecked:pressed{image: url(:/image/radioButton-unchecked-pressed.png)
}QRadioButton::indicator:checked{image: url(:/image/radioButton-checked.png)
}QRadioButton::indicator:checked:hover{image: url(:/image/radioButton-checked-hover.png)
}QRadioButton::indicator:checked:pressed{image: url(:/image/radioButton-checked-pressed.png)
}

输入框

        我们也可以根据上述内容改变输入框的样式。

属性说明
border-width
设置边框宽度
border-radius
设置边框圆角
border-color
设置边框颜色
border-style
设置边框风格
padding
设置内边距
color
设置文字颜色
background
设置背景颜色
selection-background-color
设置选中文字的背景颜色
selection-color
设置选中文字的文本颜色

QLineEdit{padding-left: 20px;                             /*左边距*/font: 16pt "黑体";                               /*字体*/border: 2px solid rgb(125, 182, 255);           /*设置边框*/border-radius: 20px;                            /*设置圆角*/background: rgb(233, 255, 151);                 /*设置背景*/color: rgb(125, 182, 255);                      /*设置字体颜色*/selection-background-color: rgb(125, 182, 255); /*设置选中内容后的背景颜色*/selection-color: rgb(233, 255, 151);            /*设置选中字体的颜色*/
}

列表

属性说明
::item选中 QListWidget 中具体的条目。
:hover选中 鼠标悬停的条目
:selected选中 被选中的条目
background设置背景颜色
border设置边框
qlineargradient
设置渐变色

        可以给 QListWidget 设置一些样式,这里就随便设置一下,与上述操作都差不多。

QListWidget::item:hover{ /* 当鼠标进入选项时的样式 */background: rgb(125, 182, 255);color: rgb(233, 255, 151);
}QListWidget::item:selected{ /* 当鼠标点击选项后的样式 */background: rgb(116, 202, 255);color: rgb(233, 255, 151);
}QListWidget{font: 16pt "黑体";border: 2px solid rgb(125, 182, 255);background-color: rgb(233, 255, 151);border-radius: 20px;padding: 10px 10px 10px 10px;color: rgb(125, 182, 255);
}

        下面再来介绍一下如何设置渐变色,使用的属性是qlineargradient,这个属性要填写六个参数:

  • x1,y1:标注横坐标起点和纵坐标起点。
  • x2,y2:标注横坐标终点和纵坐标终点。
    • x1 : 0,y1 : 0,x2 : 0,y2 : 1 就是垂直方向从上到下进行颜色渐变。
    • x1 : 0,y1 : 0,x2 : 1,y2 : 0 就是水平方向从左到右进行颜色渐变。
    • x1 : 0,y1 : 0,x2 : 1,y2 : 1 就是对角线方向从左上角到右下角进行颜色渐变。
  • stop0 和 stop1 描述两种颜色,渐变过程就是从 stop0 往 stop1 进行渐变。

        下面我们就可以给列表的背景和选项设置渐变色,但是专业的事还是要交给专业的人,配色这种事情还是应该交个专业的人,这里就随便选几个颜色设置一下。

QListWidget::item:hover{ /* 当鼠标进入选项时的样式 */background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgb(233, 255, 151), stop:1 rgb(125, 182, 255));color: rgb(233, 255, 151);
}QListWidget::item:selected{ /* 当鼠标点击选项后的样式 */background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgb(233, 255, 151), stop:1 rgb(125, 182, 255));color: rgb(233, 255, 151);
}QListWidget{font: 16pt "黑体";border: 2px solid rgb(125, 182, 255);border-radius: 20px;padding: 10px 10px 10px 10px;color: rgb(125, 182, 255);background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 rgb(233, 255, 151), stop:1  rgb(131, 255, 183))
}

菜单栏

        Qt 也支持对菜单栏进行样式设置。

属性说明
QMenuBar::item
选中菜单栏的元素
QMenuBar::item:selected
选中菜单栏中被选中的元素
QMenuBar::item:pressed
选中菜单栏中鼠标点击的元素
QMenu::item
选中菜单中的元素
QMenu::item:selected
选中菜单中被选中的元素
QMenu::separator
选中菜单中的分割线

        先在菜单栏中加入一些内容。

        之后就是设置一些样式,我也是仿照Qt Creater中的样式做的。

QMenuBar {background-color:  rgb(220, 220, 220);
}QMenuBar::item:selected {background-color: rgb(94, 95, 96);color: white;
}QMenuBar::item:pressed {background-color: rgb(94, 95, 96);color: white;
}QMenu::item:selected {border: 2px solid black; /* 为选中的菜单项添加一个框 */
}QMenu::item{border: 2px solid transparent; /* 边框颜色设置为跟随父元素,文字就不会在选中的时候动了 */
}

登录界面

        现在我们就可以设置一个界面优美的登录界面,先放上几个控件,使用垂直布局管理器,但是控件在垂直方向上的sizePolicy是Fixed(固定的),而且geometry也失效了,所以可以设置maximumSize和minimumSize设置一下高度,这样就是固定的了。

        设置好后,我们可以为登录界面添加一个背景,但是在顶层窗口设置背景图是会失效的,所以就要给控件外面套上一个和窗口一样大小的 QFrame 控件,这个控件也是在左边的控件栏中可以找到的,之后把这个QFrame放大一下,把登录的控件拖进去。

        下面就可以设置背景了,QFrame中有两个设置背景的方式,一个是background-image,另一个是border-image,后者可以跟随控件的大小发生变化,而前者就是固定的,所以我们使用后者就可以了。后面就是自己设计一个界面。

QFrame {border-image: url(:/image/login_background.jpg);
}QLineEdit {border: none;padding: 0px 10;font-size: 20px;border-radius: 10px;
}QCheckBox {font-size: 18px;
}QPushButton {background-color: qlineargradient(x1:0 y1:0 x2:1 y2:0, stop:0 rgb(172, 187, 246), stop:1 rgb(239, 133, 143));border-radius: 10px;font-size: 20px;color: white;
}QPushButton:pressed {background-color: qlineargradient(x1:0 y1:0 x2:1 y2:0, stop:0 rgb(152, 167, 226), stop:1 rgb(219, 113, 123));
}


绘图

概念

        Qt 已经内置了很多控件,但是不能保证现有的控件可以应对所有场景,Qt 提供了绘画相关的 API,可以在窗口中绘制任意图形,下面是绘画 API 核心类。

说明
QPainter
“绘画者”,用来绘图的对象,提供了一系列draw方法,可以绘制各种图形。
QPaintDevice
“画板”,描述 QPainter 把图形画到哪个对象上,QWidget 也是一种 QPaintDevice。
QPen
“画笔”,描述 QPainter 画出来的线是什么样的。
QBrush
“画刷”,描述 QPainter 填充一个区域是什么样的。

        绘图 API 的使用一般不会再构造函数中,而是在 Qt 提供的 paintEvent 事件处理函数中调用。

         关于 paintEvent 事件,它会在以下情况下被触发:

  • 控件首次创建
  • 控件被遮挡,再解除遮挡
  • 窗口最小化,再恢复
  • 控件大小发生变化时
  • 主动调用 repaint() 或者 update() 方法

绘制形状

绘制线段

        使用的是下面这个方法:

void drawLine (const QPoint &p1, const QPoint &p2);
void drawLine (int x1, int y1, int x2, int y2);

        第一个参数p1为绘制起点,p2为绘制终点;下面的就和设置渐变色是一样的。

        事件的处理操作我们也知道了,就是重写父类的 paintEvent 方法。

void Widget::paintEvent(QPaintEvent *event)
{// 绘制QPainter painter(this);// 画横线线painter.drawLine(QPoint(20, 20), QPoint(100, 20));// 画竖线painter.drawLine(20, 20, 20, 100);// 画斜线painter.drawLine(20, 20, 100, 100);
}

绘制矩形

        下面是使用的方法,参数也很好理解。

void QPainter::drawRect (int x, int y, int width, int height);
void Widget::paintEvent(QPaintEvent *event)
{// 绘制QPainter painter(this);// 画矩形painter.drawRect(20, 110, 200, 100);
}

绘制圆形

        下面是绘制圆形的方法:

void QPainter::drawEllipse (const QPoint &center, int rx, int ry);

        第一个参数为中心点,最后两个参数为横坐标半径和纵坐标半径。

void Widget::paintEvent(QPaintEvent *event)
{// 绘制QPainter painter(this);// 画圆形painter.drawEllipse(QPoint(120, 310), 100, 100);
}

        上面是后面两个参数是一样的,横纵的半径是一样的,如果不一样会怎么样呢?也都能猜出来,绘画出一个椭圆。

绘制文本

        QPainter类 中还提供了可以绘制文字的方法,第一个参数为横坐标,表示文字最左侧的位置,第二个参数为 纵坐标,表示的是文字的“基线位置”(baseline),所白了就是英语本四线三格中,从下往上数第二条线。

        还可以给painter设置一个font,这样在绘制文本的时候就可以使用设置的QFont。

        除了设置字体外,还可以设置颜色。

设置画笔

        QPainter 在绘制的时候是有一个默认画笔的,我们也可以自定义画笔,使用的就是QPen类,它可以设置线宽、颜色、样式、画刷等。

设置画笔颜⾊:QPen::QPen(const QColor &color) 画笔的颜⾊主要是通过 QColor 类设置
设置画笔宽度:void QPen::setWidth(int width)
设置画笔⻛格:void QPen::setStyle(Qt::PenStyle style)

        下面是文档中关于画笔样式的部分。

void Widget::paintEvent(QPaintEvent *event)
{// 绘制QPainter painter(this);// 设置画笔QPen pen(QColor(255, 0, 0)); // 设置成红色// 设置线条粗细pen.setWidth(5);// 设置线条风格pen.setStyle(Qt::SolidLine);// 将自定义的pen设置进painterpainter.setPen(pen);painter.drawEllipse(QPoint(400, 300), 100, 100);
}

设置画刷

        在 Qt 中,画刷是使用 QBrush类 来描述的,多用来填充,QBrush 定义了 QPainter 的填充模式,具有演示、颜色、渐变以及纹理等属性。

设置画刷主要通过 void QPen::setBrush(const QBrush &brush) ⽅法,其参数为画刷的格式
void Widget::paintEvent(QPaintEvent *event)
{// 绘制QPainter painter(this);// 设置画笔QPen pen(QColor(255, 0, 0)); // 设置成红色// 设置线条粗细pen.setWidth(5);// 设置线条风格pen.setStyle(Qt::DashLine);// 将自定义的pen设置进painterpainter.setPen(pen);// 创建QBrush对象QBrush brush;brush.setColor(QColor(0, 0, 255));// 设置brush样式brush.setStyle(Qt::SolidPattern); // 实心的样式// 将自定义的brush设置进painterpainter.setBrush(brush);painter.drawEllipse(QPoint(400, 300), 100, 100);
}


绘制图片

        Qt 提供了四个类来处理图像数据:QImage、QPixmap、QBitmap 和 QPicture,它们都是常用的绘图设备。

  • QImage主要用来进行 I/O 处理,它对 I/O 处理操作进行了优化,而且可以用来直接访问和操作像素;
  • QPixmap 主要用来在屏幕上显示图像,它对在屏幕上显示图像进行了优化;
  • QBitmap 是 QPixmap 的子类,用来处理颜色深度为1的图像,即只能显示黑白两种颜色;
  • QPicture 用来记录并重演 QPainter 命令。

绘制简单图片

        我们依旧要重写paintEvent方法。

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QPixmap pixmap(":/image/login_background.jpg");painter.drawPixmap(0, 0, 800, 600, pixmap); // 前两个参数为起点;中间两个参数为图片大小,可以设置这两个参数实现图片的缩放
}

旋转图片

        图片的旋转使用的是 QPainter类 中的 rotate方法,默认以原点为中心进行旋转。想要改变旋转的中心可以使用translate方法。

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QPixmap pixmap(":/image/login_background.jpg");// 旋转图片本质上是把 QPainter 对象进行旋转painter.rotate(180); painter.translate(-800, -600); // 这个方法就是改变坐标的原点painter.drawPixmap(0, 0, 800, 600, pixmap);
}

        通过上述操作,不管是平移还是旋转,还有放大缩小都是可以实现的。


        Qt 到这里就要告一段落了,通过学习了 Qt 也让我收获了很多,所以继续学习吧。

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

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

相关文章

微信换手机号了怎么绑定新手机号?

微信换手机号了怎么绑定新手机号&#xff1f; 1、在手机上找到并打开微信&#xff1b; 2、打开微信后&#xff0c;点击底部我的&#xff0c;并进入微信设置&#xff1b; 3、在微信设置账号与安全内&#xff0c;找到手机号并点击进入&#xff1b; 4、选择更换手机号&#xff0c…

淘系-万相台无界实操运营课:淘系 付费工具课(40节课)

课程目录 01_万相台无界系统性忖费推广思维.mp4 02_万相台无界七大推广场景详解.mp4 03关键词推广计划之标准计划搭建技巧.mp4 04_关键词推广之智能计划推广技巧.mp4 05_关键词推广之趋势选品计划推广技巧.mp4 06关键词推广之智能选品计划推广技巧.mp4 07_非标品的关键词…

待办工作如何在桌面分区显示

在现代快节奏的工作环境中&#xff0c;我们每天都要处理大量的待办事项。面对这些繁多的事项&#xff0c;很多人常常感到无从下手&#xff0c;导致工作任务堆积&#xff0c;影响工作效率。那么&#xff0c;如何在繁杂的事项中保持清晰&#xff0c;让工作更有条理呢&#xff1f;…

旋转变压器软件解码simulink仿真

1.介绍 旋转变压器是一种精密的位置、速度检测装置&#xff0c;尤其适用于高温、严寒、潮湿、高速、振动等环境恶劣、旋转编码器无法正常工作的场合。旋转变压器在使用时并不能直接提供角度或位置信息&#xff0c;需要特殊的激励信号和解调、计算措施&#xff0c;才能将旋转变压…

Hamster (CHO) PLBL2 ELISA Kit—仓鼠(CHO) PLBL2 ELISA试剂盒

宿主细胞蛋白&#xff08;HCP&#xff09;是生物制药过程中产生的一类主要杂质&#xff0c;是重组疫苗及重组抗体类药物的重要质控指标。虽然大部分HCP可以在早期的纯化步骤中除去&#xff0c;但是仍有一些HCP会通过纯化系统携带&#xff0c;可以躲过常规HCP ELISA检测。ICL的H…

RedHat9 | podman容器-续集

一、管理容器存储和网络资源 使用容器来运行简单的进程&#xff0c;然后退出。可以配置容连续运行特定服务&#xff0c;如数据库服务。如果持续运行服务&#xff0c;需要向容器添加更多的资源&#xff0c;如持久存储或对其他网络的访问权限。 针对企业容器平台上的大型部署&a…

为Ubuntu-24.04-live-server-amd64磁盘扩容

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 文章目录 系列文章目录前言一、检查系统本身情况1.用 lsblk 命令查看自己系统磁盘是什么状态2.用 df -h 命令查看文件系统的磁盘空间使用情况3.解决 Ubuntu-24.04 磁盘空间只能用一半的问题3-1扩展逻辑卷&#xff…

这才是CSDN最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

基于X86+FPGA+AI的智能仓储AGV机器人解决方案

应用场景 智能仓储是物流过程的一个环节&#xff0c;智能仓储的应用&#xff0c;保证了货物仓库管理各个环节数据输入的速度和准确性&#xff0c;确保企业及时准确地掌握库存的真实数据&#xff0c;合理保持和控制企业库存&#xff0c;其中搬运环节目前已大量采用AGV的方式进行…

python-逻辑语句

if else语句 不同于C&#xff1a;else if range语句&#xff1a; continue continue的作用是&#xff1a; 中断所在循环的当次执行&#xff0c;直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break&#xff0c;在…

星火认知大模型Spark3.5 api调用 #AI夏令营 #Datawhale #夏令营

环境安装 pip install --upgrade -q spark_ai_python 官网注册 链接&#xff1a;https://console.xfyun.cn/app/myapp 官方会在报名成功后&#xff0c;立即发放星火大模型 Spark Max的 API 额度助力我们完成赛事&#xff0c; 200w Tokens 任你花&#xff01; 暑期有四场夏令营…

HDC Cloud 2024 | CodeArts加速软件智能化开发,携手HarmonyOS重塑企业应用创新体验

2024年6月21~23日&#xff0c;华为开发者大会HDC 2024在东莞溪流背坡村隆重举行。期间华为云主办了以“CodeArts加速软件智能化开发&#xff0c;携手HarmonyOS重塑企业应用创新体验”为主题的分论坛。论坛汇聚了各行各业的专家学者、技术领袖和开发者&#xff0c;共同探讨Harmo…

养殖自动化管理系统:开启智慧养殖新篇章

在现代农业的快速演进中&#xff0c;养殖业正经历一场前所未有的技术革命。养殖自动化管理系统&#xff0c;作为这场变革的前沿科技&#xff0c;正逐步成为推动行业高效、环保、可持续发展的关键力量。本文将深入探讨自动化养殖系统如何通过精准管理、智能监控、数据驱动决策&a…

SpringCloud_Ribbon负载均衡

概述 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 源码 LoadBalancerInterceptor 其中含有intercept方法&#xff0c;拦截用户的HttpRequest请求&#xff1a; request.getURI() 获取请求uri&#xff0c;即http://userservice/use…

3D Gaussian Splatting代码中的Gaussian_Module和Cameras两个类的代码解读

Gaussian_model 讨论Gaussian_model这个类&#xff0c;是因为里面包含了三维高斯分布的基本信息&#xff0c;里面定义了各种参量的构建方式、用于优化学习的激活函数、学习率设置方法和高斯点优化过程中的增加与删除方式及对应优化器的处理方法。这个类定义在scene文件夹中的g…

反激开关电源反馈电路相关参数选型

Vb的电压正常变化范围是&#xff1a;0-1V&#xff08;最低0V&#xff0c;由于有稳压管&#xff0c;最高不会超过1V&#xff09; Vb的电压越高&#xff0c;则输出占空比越大&#xff0c;Vb电压越低&#xff0c;则输出占空比越小 那么Va的正常变化范围应该是&#xff1a;1.4-4.…

云卓SKYDROID-H30——科技改变未来

云卓H30采用高通处理器、搭载安卓嵌入式系统&#xff0c;拥有三个工作频率&#xff0c;让图像更清晰、延迟更低、距离远、抗干扰性强&#xff0c;支持多种接口&#xff0c;更有10.1寸高清工业级阳光可视屏&#xff0c;防尘耐磨&#xff0c;结构强度高&#xff0c;适用于各种严苛…

Python和tkinter单词游戏

Python和tkinter单词游戏 数据字典文本文件&#xff0c;文件名为Dictionary.txt&#xff0c;保存编码格式为&#xff1a;utf-8。文本内容&#xff1a;每行一个 单词 &#xff0c;单词和解释用空格分隔&#xff0c;如 a art.一(个)&#xff1b;每一(个) ability n.能力&#…

springboot实验报告管理系统-计算机毕业设计源码10596

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

HarmonyOS Next开发学习手册——单选框 (Radio)

Radio是单选框组件&#xff0c;通常用于提供相应的用户交互选择项&#xff0c;同一组的Radio中只有一个可以被选中。具体用法请参考 Radio 。 创建单选框 Radio通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Radio(options: {value: string, group: string})…