Qt第三课 ----------输入类的控件属性

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


输入类

  • **作者前言**
  • LineEdit
    • QValidator
  • QTextEdit
    • html 和markdown
    • undoRedoEnable
    • tabstopWidth
    • overwritemode
    • acceptRichText
    • verticalScrollBarPolicy和horizontalScrollBarPolicy
    • 信号函数textChanged()
    • 信号函数selectionChanged()
    • 信号函数cursorPositionChanged
  • QCombo box
  • Spin Box和 QDoubleSpinBox
  • 5 Date Edit & Time Edit
  • Dial
  • QSlider

LineEdit

QLineEdit ⽤来表⽰单⾏输⼊框. 可以输⼊⼀段⽂本, 但是不能换⾏.
相关属性如下:
在这里插入图片描述

在这里插入图片描述
还有一些信号函数
在这里插入图片描述
下面使用一些代码简单的介绍

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);const QRect pointOne = Lineedtifuntion("账号:", "请输入账号",this->geometry().width()/2, this->geometry().height()/2);const QRect pointTwo =Lineedtifuntion("密码:", "请输入密码", pointOne.x(), pointOne.y());const QRect pointThree = Buttonfuntion("性别:","", pointTwo.x(), pointTwo.y());const QRect pointfour = Lineedtifuntion("电话:", "请输入电话号码", pointThree.x(), pointThree.y());//登入按钮QPushButton* button = new QPushButton("登入", this);button->move(QPoint(pointfour.x() , pointfour.y()+50));}const QRect Widget::Lineedtifuntion(QString name, QString inpt, int x, int y)
{QLabel* label = new QLabel(name,this);label->move(x,y+50);QLineEdit* lineeditOne = new QLineEdit(this);lineeditOne->move(QPoint(label->geometry().x()+50 , label->geometry().y()));lineeditOne->setMaxLength(15);lineeditOne->setFrame(true);lineeditOne->setPlaceholderText(inpt);//判断是否为密码if("密码:"==name)//更换显示模式lineeditOne->setEchoMode(QLineEdit::Password);lineeditOne->setClearButtonEnabled(true);//显示出自动清理按钮//进行电话号码的格式约束if("电话:"== name)lineeditOne->setInputMask("000-000-000");return label->geometry();}const QRect Widget::Buttonfuntion(QString name, QString inpt, int x, int y)
{QLabel* label = new QLabel(name,this);label->move(x,y+50);//性别QRadioButton* rediobuttonmale = new QRadioButton("男",this);rediobuttonmale->move(QPoint(label->geometry().x()+50 , label->geometry().y()));QRadioButton* rediobuttonfemale= new QRadioButton("女",this);rediobuttonfemale->move(QPoint(rediobuttonmale->geometry().x()+50 , rediobuttonmale->geometry().y()));return label->geometry();}

效果如下:
在这里插入图片描述
这里的演示了setMaxLength(设置最大长度)、setFrame(设置边框),setPlaceholderText(为空时显示的内容),>setEchoMode(显示格式),

其中setClearButtonEnabled(设置清除)的效果如下:
在这里插入图片描述
剩下的就不过多介绍了。

QValidator

还需要注意的是inputMask。这个是一个简单格式约束,上面的代码000-000-000表示只能输入数字,光靠这个还是不行的,这就要使用到正则表达式了
这个正则表达式可以去网上查查
下面我们使用正则表达式来进行验证一下。
首先我们需要进行创建一个QRegExp对象,然后使用验证器进行验证,在Qt中有四种验证器

如图:
在这里插入图片描述
**注意:**QRegularExpressionValidator 在匹配性能上做出了⼀定优化. 但是从使⽤⻆度讲, 和
QRegExpValidator 差别不⼤. 我们使⽤ QRegExpValidator 即可
大致思路就是。 创建一个验证器, 然后验证字符串和正则表达式是否符合
下面就是使用到的QRegExpValidator::validate函数,

在这里插入图片描述
第⼀个参数填写的是要验证的字符串. 由于参数要求是 QString& ⽽不是 const
QString& , 需要把这个变量复制⼀下.
◦ 第⼆个参数是⼀个 int&, 是输出型参数. 当验证的字符串不匹配时, 返回这个字符串的⻓度. (没有
啥实质作⽤)
在这里插入图片描述
这个函数的返回值是一个枚举类型,
如图:
在这里插入图片描述
代码如下:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//QLineEdit * number = new QLineEdit(this);number->setGeometry(50,50,300,100);//创建验证按钮QPushButton *buttonvalidator =new  QPushButton("验证",this);//创建正则表达式对象QRegExp regexp("^1\\d{10}\\d$");//创建验证器QRegExpValidator * validator= new QRegExpValidator(regexp,this);//    connect(buttonvalidator, &QPushButton::clicked, this, [=]()
//    {
//        number->setValidator(validator);//设置一个内置的验证器,需要返回一个validator对象
//        QString str = number->text();
//        int num = 0;
//        QValidator::State elemest =  number->validator()->validate(str,num);
//        if(elemest == QValidator::Acceptable)
//            qDebug() << "验证通过";
//        else
//            qDebug()<< "验证不通过"<< num << str << elemest;//    });connect(number, &QLineEdit::textEdited, this, [=](const QString &str){QString ch =  str;int point = 0;number->setValidator(validator);if(number->validator()->validate(ch, point) == QValidator::Acceptable)qDebug() << "验证通过";elseqDebug()<< "验证不通过" << str;});}

效果如下:
在这里插入图片描述
这里的代码主要演示的是判断字符是否符合要求,
下来我们还可以写一段注册页面的设置密码的情况, 就写一个输入的两个密码是否一致

// 输入两串字符是否一致//创建两个lineeditQLineEdit* passwordOne = new QLineEdit(this);QLineEdit* passwordTwo = new QLineEdit(this);passwordOne->setEchoMode(QLineEdit::Password);passwordTwo->setEchoMode(QLineEdit::Password);QRect pos = passwordOne->geometry();passwordTwo->move(pos.x(), pos.y()+50);connect(passwordOne, &QLineEdit::textEdited, this, [=](const QString &arg){(void)arg;//获取这个文本QString textOne = passwordOne->text();//设置验证器QRegExp elemest(textOne);QRegExpValidator* validator = new QRegExpValidator(elemest, this);//给第二行设置内置验证器passwordTwo->setValidator(validator);});connect(passwordTwo, &QLineEdit::textEdited, this,[=](const QString & arg){(void)arg;QString textTwo = passwordTwo->text();int strsize = 0;QValidator::State ret =  passwordTwo->validator()->validate(textTwo, strsize);if(ret == QValidator::Acceptable)qDebug()<< "验证成功";elseqDebug()<< "验证失败";});//创建一个显示密码按钮QCheckBox* Onebutton = new QCheckBox("显示密码",this);//密码框QLineEdit * passwrodLine = new QLineEdit(this);passwrodLine->setEchoMode(QLineEdit::Password);passwrodLine->setGeometry(Onebutton->geometry().x(), Onebutton->geometry().y()+100, 200,100);connect(Onebutton, &QCheckBox::clicked, this, [=](bool checkedelement){if(checkedelement != false)passwrodLine->setEchoMode(QLineEdit::Normal);elsepasswrodLine->setEchoMode(QLineEdit::Password);});

这里的代码是第二行输入框输入的字符数量会受到第一行输入框输入的字符限制的,不会跟我们见到的两行输入框可以随便输入,如果要实现这样的效果, 代码如下:

 connect(passwordOne, &QLineEdit::textEdited, this, [=](const QString &arg){(void)arg;//获取这个文本QString textOne = passwordOne->text();QString textTwo = passwordTwo->text();if(textOne == textTwo)qDebug()<< "验证成功";elseqDebug()<< "验证失败";});connect(passwordTwo, &QLineEdit::textEdited, this,[=](const QString & arg){(void)arg;//获取这个文本QString textOne = passwordOne->text();QString textTwo = passwordTwo->text();if(textOne == textTwo)qDebug()<< "验证成功";elseqDebug()<< "验证失败";});

我们还可以写一个显示密码的代码出来来进一步的演示

 QCheckBox* Onebutton = new QCheckBox("显示密码",this);//密码框QLineEdit * passwrodLine = new QLineEdit(this);passwrodLine->setEchoMode(QLineEdit::Password);passwrodLine->setGeometry(Onebutton->geometry().x(), Onebutton->geometry().y()+100, 200,100);connect(Onebutton, &QCheckBox::clicked, this, [=](bool checkedelement){if(checkedelement != false)passwrodLine->setEchoMode(QLineEdit::Normal);elsepasswrodLine->setEchoMode(QLineEdit::Password);});

QTextEdit

表⽰多⾏输⼊框. 也是⼀个富⽂本 & markdown 编辑器,支持html、markdown和纯文本
如果只是想使用纯文本格式可以使用QPlainText,这两个类是差不多的
属性如下:
markdown :输⼊框内持有的内容. ⽀持 markdown 格式. 能够⾃动的对markdown ⽂本进⾏渲染成 html

html: 输⼊框内持有的内容. 可以⽀持⼤部分 html 标签. 包括 img 和 table 等.
placeHolderText: 输⼊框为空时提⽰的内容
readOnly:是否是只读的
undoRedoEnable:是否开启 undo / redo 功能.,按下 ctrl + z 触发 undo,按下 ctrl + y 触发 redo
在这里插入图片描述
信号函数
在这里插入图片描述

下面我们一一使用代码演示

html 和markdown

这两个属性主要是让文本按照html或者maekdown格式来渲染

QTextEdit* Multiple_Line = new QTextEdit(this);Multiple_Line->setHtml("<p>你好呀</p>");

效果如下:
在这里插入图片描述
这里只是演示了html的写法,markdown的写法可以自行探索
需要注意的是,如果我们想要获取到对于的文本,不能直接使用html或者markdown,例如获取html的文本:

 qDebug()<< Multiple_Line->toHtml();

效果如下
在这里插入图片描述
如果想要获取纯文本,可以使用toPlainText()

undoRedoEnable

这个就是可以设置是否可以剪切(undo)和剪切撤回(redo)

Multiple_Line->setUndoRedoEnabled(false);

禁用

tabstopWidth

这个属性就是按下tap键缩进多少个字符,

 Multiple_Line->setTabStopWidth(6);//缩进6个字符

overwritemode

开启覆盖写模式
这个主要是覆盖输入目前的内容,某些编程环境或框架中,这个方法通常用于设置一个对象或组件在处理数据时是否允许覆盖现有的数据。
这里的话实现不了

acceptRichText

这个是用来设置是否可以富文本的
富文本:组件允许用户输入包含格式(如字体、颜色、粗体、斜体等)的文本。这意味着用户可以使用富文本编辑器的功能来格式化他们的文本。

verticalScrollBarPolicy和horizontalScrollBarPolicy

verticalScrollBarPolicy是设置垂直滚动条, horizontalScrollBarPolicy是设置水平滚动条

有三个分别是:
Qt::ScrollBarAsNeeded : 根据内容⾃动决定是否需要滚动条。这是默认值。
• Qt::ScrollBarAlwaysOff : 总是关闭滚动条。
• Qt::ScrollBarAlwaysOn : 总是显⽰滚动条。

Multiple_Line->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);Multiple_Line->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

如图:
在这里插入图片描述

信号函数textChanged()

当文本内容被改变就会触发

connect(Multiple_Line, &QTextEdit::textChanged, this, [=](){qDebug()<< Multiple_Line->toPlainText();//获取纯文本});

效果如下:
在这里插入图片描述

信号函数selectionChanged()

当光标选中的内容触发
下面我们需要使用到一个类
QTextEdit 中包含了⼀个 QTextCursor 对象, 通过这个对象可以获取到当前光标位置和选中
的内容.
textCursor()返回一个 QTextCursor 对象,使用selectedText()可以查看光标选中的内容

 connect(Multiple_Line, &QTextEdit::selectionChanged,this,[=](){qDebug()<< "选择的内容:" << Multiple_Line->textCursor().selectedText();});

效果如下:
在这里插入图片描述
当我们鼠标左键按住不放,就会不断的认为光标的选择范围不断发生改变,当我们松开,就不会输出

信号函数cursorPositionChanged

光标移动时触发

 connect(Multiple_Line, &QTextEdit::cursorPositionChanged,this,[=](){qDebug()<< "选择的内容:" << Multiple_Line->textCursor().selectedText();});

如图:
在这里插入图片描述
光标移动就会触发

剩下的信号函数,可以根据自己去实现一下,

QCombo box

这个一个下拉框的类
属性和方法如下:
在这里插入图片描述
在这里插入图片描述

核心信号如下:
在这里插入图片描述
下面我们一一演示代码

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//写一个下拉框,用户可以自己添加QComboBox* comboboxOne = new QComboBox(this);//QLineEdit * valueEdit = new QLineEdit(this);QPushButton *addButton = new QPushButton("添加", this);valueEdit->move(this->geometry().x()+100, this->geometry().y());addButton->move(valueEdit->geometry().x()+500, valueEdit->geometry().y());valueEdit->setPlaceholderText("输入要添加的内容");comboboxOne->setMaxCount(15);//设置用户可以修改comboboxOne->setEditable(true);connect(addButton, &QPushButton::clicked, this,[=](){comboboxOne->addItem(valueEdit->text());valueEdit->setText("");if(comboboxOne->currentIndex()+1 >= 15)qDebug() << "添加失败,已经饱和";elseqDebug()<< "你当前选择的序列号为:" << comboboxOne->currentIndex()+1<< "内容为:"<< comboboxOne->currentText();});comboboxOne->addItem("hello");}

效果如下:
在这里插入图片描述
这里的代码使用到了curretext 、currentIndex、Editable等方法, 可以很直观的看到效果

下面我们写一些关于信号函数的代码出来看看效果
下面我们需要读取文件, 在C语言中可以使用fopen来打开文件,在C++中可以使用fstream来打开文件
下面是以cpu为中心, 来进行判断使用ifstream还是ofstream的
在这里插入图片描述
代码如下:

 QComboBox* comboboxOne = new QComboBox(this);//打开文件std::ifstream file("../ComboBox/one.txt");//判断文件是否打开成功if(!file.is_open())qDebug()<< "打开失败";else{qDebug()<< "打开成功";//开始读取std::string linech;while(std::getline(file, linech))//如果读取成功,流的状态将保持良好;如果到达文件末尾或发生错误,流的状态将变为不良{comboboxOne->addItem(QString::fromStdString(linech));}file.close();}

效果如下:
在这里插入图片描述
QString::fromStdString(linech)中这个函数是把string类型转换成Qstring, 如果想要把Qstring
转换成string, 可以使用toStdString()

Spin Box和 QDoubleSpinBox

这两种属于一种微调框,它是带有按钮的输⼊框. 可以⽤来输⼊整数/浮点数. 通过点击按钮来修改数值⼤⼩.
如图:
在这里插入图片描述
由于这两个是相似的下面就以讲解spinbox为主

属性如下:

QSpinBox 的关键属性包括:

value: 获取或设置当前的整数值。

minimum: 设置允许的最小值。

maximum: 设置允许的最大值。

singleStep: 设置每次增减的步长。

prefix: 设置显示在值前的字符串。

suffix: 设置显示在值后的字符串。

wrap: 设置是否允许循环输入(即超过最大值后回到最小值)。

readOnly: 设置为只读模式,防止用户直接输入。

displayIntegerBase: 设置显示的进制(如十进制或十六进制)。
在这里插入图片描述
在这里插入图片描述
信号函数如下:
在这里插入图片描述

图形化界面如下:
在这里插入图片描述

代码如下:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setText("主食");ui->label_2->setText("饮料");ui->label_3->setText("菜品");fileRead("../spinbox/staplefood.txt", ui->comboBox);fileRead("../spinbox/drinck.txt", ui->comboBox_2);fileRead("../spinbox/dish.txt", ui->comboBox_3);ui->spinBox->setRange(1,5);//范围ui->spinBox_2->setRange(1,5);ui->spinBox_3->setRange(1,5);PreFixx(ui->spinBox, "数量:");SufFixx(ui->spinBox, "个");ui->spinBox->setFixedSize(100,20);}Widget::~Widget()
{delete ui;
}void Widget::fileRead(QString fileName, QComboBox*  propre)
{if(fileName.isEmpty())return;//打开文件std::ifstream file(fileName.toStdString());//判断是否打开成功if(!file.is_open()){qDebug()<< "失败";return;}std::string line;//读取while(std::getline(file,line)){propre->addItem(QString::fromStdString(line));}file.close();}void Widget::PreFixx(QSpinBox *element, const QString fix)
{element->setPrefix(fix);
}void Widget::SufFixx(QSpinBox *element, const QString fix)
{element->setSuffix(fix);
}

这里采用两者结合,更加清晰的观察,效果如下:
在这里插入图片描述
代码还有一些未使用的函数,可以自行探讨,

信号函数的使用

connect(ui->spinBox, &QSpinBox::textChanged,this, [=](const QString &ch){qDebug()<< ch;});void Widget::on_spinBox_valueChanged(int arg1)//通过函数名链接
{qDebug()<< arg1;
}

效果如下:
在这里插入图片描述

5 Date Edit & Time Edit

这个是根据SpinBox来进行改造过来的,
注意:使⽤ QDateEdit 作为⽇期的微调框 以及 使⽤ QTimeEdit 作为时间的微调框
属性如下:
date: 获取或设置当前日期。
minimumDate: 获取或设置允许选择的最早日期。
maximumDate: 获取或设置允许选择的最晚日期。
displayFormat: 设置日期在控件中显示的格式,例如 “yyyy-MM-dd”。
calendarPopup: 指示是否在点击控件时显示日历弹出窗口。
timeSpec: 获取或设置时间的规格(如本地时间或 UTC)。
(Qt::LocalTime :显⽰本地时间。
• Qt::UTC :显⽰协调世界时(UTC)。
• Qt::OffsetFromUTC :显⽰相对于UTC的偏移量(时差))

readOnly: 设置控件是否为只读模式。
信号函数如下:
在这里插入图片描述
下面开始演示
代码如下:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建时间框QDateEdit * DateTime = new QDateEdit(this);DateTime->setDisplayFormat("yyyy年MM月dd日");DateTime->setTimeSpec(Qt::LocalTime);
}

效果如下:
在这里插入图片描述
需要注意的是,我们选中日期的年份可以进行修改,也可以选择月份进行修改

Dial

表⽰⼀个 旋钮
如同:
在这里插入图片描述

属性如下:
minimum: 获取或设置旋钮的最小值。
maximum: 获取或设置旋钮的最大值。
value: 获取或设置当前旋钮的值。
singleStep: 设置每次调整旋钮时的增量(通常用于按键调整)。
pageStep: 设置每次大步调整旋钮时的增量(通常用于鼠标滚轮)。
notchTarget: 设置旋钮的刻度间隔,决定刻度的分布。
notchesVisible 是否显⽰ 刻度线
wrapping: 设置是否允许旋钮值在达到最大值后回到最小值(布尔值)。
sliderPosition: 获取或设置滑块当前的位置。

信号函数如下:
在这里插入图片描述
下面我们写一个通过旋转按钮来设置窗口的透明度,

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->dial->setWrapping(true);// 允许循环ui->dial->setSingleStep(1);// 步长ui->dial->setNotchesVisible(true);//显示刻度ui->dial->setNotchTarget(10);//刻度与刻度之前的格数ui->dial ->setMinimum(0);ui->dial->setMaximum(100);this->setWindowIcon(QIcon(QPixmap(":/img1.png")));//添加背景图片QPalette paletee;paletee.setBrush(QPalette::Background, QBrush(QPixmap(":/img1.png")));this->setPalette(paletee);this->setAutoFillBackground(true);
}Widget::~Widget()
{delete ui;
}
void Widget::on_dial_valueChanged(int value)
{qDebug()<< value;//窗口透明度this->setWindowOpacity(value/100.0);
}

效果如下:
在这里插入图片描述

QSlider

表⽰⼀个滑动条.
这个和QDila是一样的,QSlider 和 QDial 都是继承⾃ QAbstractSlider , 因此⽤法上基本相同
下面列举出不同的属性
orientation 滑动条的⽅向是⽔平还是垂直
invertedAppearance 是否要翻转滑动条的⽅向
tickPosition 刻度的位置.
tickInterval 刻度的密集程度

下面我们写一段代码控制widget窗口的大小:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QRect coordinate = this->geometry();//创建水平滑动条QSlider* horizontalSlider = SliderCtreat(Qt::Horizontal);//创建垂直滑动条QSlider* verticalSlider = SliderCtreat(Qt::Vertical,true);horizontalSlider->setMaximum(coordinate.width());verticalSlider->setMaximum(coordinate.height());horizontalSlider->setSliderPosition(horizontalSlider->maximum());verticalSlider->setSliderPosition(horizontalSlider->maximum());verticalSlider->move(verticalSlider->x(), verticalSlider->y()+50);connect(horizontalSlider, &QSlider::valueChanged, this, [=](int value){qDebug() <<"horizontal:"<< value;QRect coordinate = this->geometry();this->setGeometry(coordinate.x(), coordinate.y(), value, coordinate.height());});connect(verticalSlider, &QSlider::valueChanged, this, [=](int value){qDebug() <<"vertical:"<< value;QRect coordinate = this->geometry();this->setGeometry(coordinate.x(), coordinate.y(),  coordinate.height(),(value));});}
QSlider *Widget::SliderCtreat(Qt::Orientation a, bool change)
{QSlider * slider = new QSlider(this);slider->setOrientation(a);//设置滑动条水平或者垂直slider->setInvertedAppearance(change);//设置滑动条的滑动方向是否发生改变.slider->setSliderPosition(100);return slider;}

如图:
在这里插入图片描述

我们还可以通过设置快捷键来进行控制滑动条的滑动
代码如下:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建两个快捷键QShortcut* subShorcurLeft = new QShortcut(this);QShortcut* addShorcurrigth = new QShortcut(this);subShorcurLeft->setKey(QKeySequence("-"));addShorcurrigth->setKey(QKeySequence("+"));ui->horizontalSlider->setSingleStep(1);ui->horizontalSlider->setMaximum(200);connect(subShorcurLeft, &QShortcut::activated, this, [=](){ui->horizontalSlider->setSliderPosition(ui->horizontalSlider->value()-1);ui->label->setText(QString::number(ui->horizontalSlider->value()));});connect(addShorcurrigth, &QShortcut::activated, this, [=](){ui->horizontalSlider->setSliderPosition(ui->horizontalSlider->value()+1);ui->label->setText(QString::number(ui->horizontalSlider->value()));});
}

效果如下:
在这里插入图片描述

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

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

相关文章

LabVIEW 离心泵机组故障诊断系统

开发了一套基于LabVIEW图形化编程语言设计的离心泵机组故障诊断系统。系统利用先进的数据采集技术和故障诊断方法&#xff0c;通过远程在线监测与分析&#xff0c;有效提升了离心泵的预测性维护能力&#xff0c;保证了石油化工生产的连续性和安全性。 项目背景及意义 离心泵作…

typescript的简介

简介 tsc npm install -g typescripttsc -v作用 检查类型和语法错误&#xff0c;提前纠错 ts的类型 如何穿件带有ts的vue工程 作用 常见类型 用法 编写一个ts文件 let username:string "John";let age:number 25;let isUpdated:boolean true;let data:any &q…

WPF+MVVM案例实战(二十)- 制作一个雷达辐射效果的按钮

文章目录 1、案例效果2、文件创建与代码实现1、创建文件2、图标资源文件3、源代码获取1、案例效果 2、文件创建与代码实现 1、创建文件 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 RadarEffactWindow.xaml 。代码功能分两个部分完成,一个是样式,一个是动画。页…

​Java面试经典 150 题.P13. 罗马数字转整数(012)​

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int romanToInt(String s) {int sum…

一键AI换衣-可图AI试衣

我们的真的实现了穿衣自由了吗&#xff1f;上传一张人物图片和衣服的图片&#xff0c;就能实现一键换衣。 这就是可图AI试衣项目 魔塔地址&#xff1a;https://www.modelscope.cn/studio ... lors-Virtual-Try-On 参考&#xff1a; 一键AI换衣-可图AI试衣 https://www.jinsh…

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 基于Spring Boot的个人云盘管理系统设计…

奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用

随着新能源汽车的发展&#xff0c;对仿真技术的要求也越来越高。那么奇瑞汽车利用降阶模型在新能源汽车热管理仿真上做了哪些应用呢&#xff1f;本次内容主要从四个方面展开介绍&#xff1a; 1、 奇瑞汽车简介&#xff1b; 2、 热管理降阶模型开发的背景&#xff1b; 3、 高低…

ctf文件上传题小总结与记录

解题思路&#xff1a;先看中间件&#xff0c;文件上传点&#xff08;字典扫描&#xff0c;会员中心&#xff09;&#xff0c;绕过/验证&#xff08;黑名单&#xff0c;白名单&#xff09;&#xff0c;解析漏洞&#xff0c;cms&#xff0c;编辑器&#xff0c;最新cve 文件上传漏…

nginx上传文件超过限制大小、响应超时、反向代理请求超时等问题解决

1、文件大小超过限制 相关配置&#xff1a; client_max_body_size&#xff1a; Syntax:client_max_body_size size;Default:client_max_body_size 1m;Context:http, server, location 2、连接超时: proxy_read_timeout&#xff1a; Syntax:proxy_read_timeout time;Default…

00-开发环境 MPLAB IDE 配置

MPLAB IDE V8.83 File 菜单简介 New (CtrlN)&#xff1a; 创建一个新文件&#xff0c;用于编写新的代码。 Add New File to Project...&#xff1a; 将新文件添加到当前项目中。 Open... (CtrlO)&#xff1a; 打开现有文件。 Close (CtrlE)&#xff1a; 关闭当前打开的文件。 …

基于BP神经网络的手写体数字图像识别

基于BP神经网络的手写体数字图像识别 摘要 在信息化飞速发展的时代&#xff0c;光学字符识别是一个重要的信息录入与信息转化的手段&#xff0c;其中手写体数字的识别有着广泛地应用&#xff0c;如&#xff1a;邮政编码、统计报表、银行票据等等&#xff0c;因其广泛地应用范围…

鸿蒙进阶篇-Swiper组件的使用

“在科技的浪潮中&#xff0c;鸿蒙操作系统宛如一颗璀璨的新星&#xff0c;引领着创新的方向。作为鸿蒙开天组&#xff0c;今天我们将一同踏上鸿蒙基础的探索之旅&#xff0c;为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…

Ubuntu删除docker

文章目录 安装依赖1.安装操作系统&#xff1a;2.CPU支持 安装docker1.查看系统版本2.执行卸载 安装依赖 1.安装操作系统&#xff1a; 高于 Ubuntu 20.04(LTS) 版本 2.CPU支持 ARM和X86_64 安装docker 1.查看系统版本 cat /etc/*releas*uname -a2.执行卸载 检查本地dock…

【机器学习】23. 聚类-GMM: Gaussian Mixture Model

1. 定义和假设 定义&#xff1a;probabilistic clustering&#xff08;model-base&#xff09; 假设&#xff1a;数据服从正态分布 2. 算法内容 我们假设数据是由k个高斯&#xff08;正态&#xff09;分布混合生成的。每个分布有2个参数&#xff1a;μ和σ。 一个分布对应一…

Node.js:Express 服务 路由

Node.js&#xff1a;Express 服务 & 路由 创建服务处理请求req对象 静态资源托管托管多个资源挂载路径前缀 路由模块化 Express是Node.js上的一个第三方框架&#xff0c;可以快速开发一个web框架。本质是一个包&#xff0c;可以通过npm直接下载。 创建服务 Express创建一…

TensorRT-LLM的k8s弹性伸缩部署方案

Scaling LLMs with NVIDIA Triton and NVIDIA TensorRT-LLM Using Kubernetes | NVIDIA Technical Blog 一共涉及4个k8s组件&#xff1a; 1. Deployment&#xff1a;跑起来N个pod&#xff1b;指定NVIDIA官方的triton&trt-llm的docker image&#xff0c;指定好model放在哪个…

6.0、静态路由

路由器最主要的功能就是转发数据包。路由器转发数据包时需要查找路由表&#xff08;你可以理解为地图&#xff09;&#xff0c;管理员可以直接手动配置路由表&#xff0c;这就是静态路由。 1.什么是路由&#xff1f; 在网络世界中&#xff0c;路由是指数据包在网络中的传输路…

4. 类和对象(下)

1. 初始化列表 • 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅ 式&#xff0c;就是初始化列表&#xff0c;初始化列表的使⽤⽅式是以⼀个冒号开始&#xff0c;接着是⼀个以逗号分隔的数据成 员列表&#xff0c…

AI驱动的医疗创新:信息抽取与知识图谱在临床应用中的转变

一、思通数科平台支持多种输入格式&#xff0c;如电子病历、临床数据和医学文献等&#xff0c;并能将这些信息快速转换为结构化数据&#xff0c;包括自动360度不同角度的旋转识别&#xff0c;提升数据的可操作性和可检索性。通过我们的解决方案&#xff0c;医疗机构能够有效整合…

线程的joinable属性,以及主线程出现异常时,对其等待应该进行的处理

在C多线程编程中&#xff0c;线程的 joinable 属性是一个重要的概念&#xff0c;用于判断线程是否可以调用 join() 或 detach() 方法。当线程已经调用过 join() 或 detach() 之后&#xff0c;它将不再 joinable&#xff0c;此时调用 join() 或 detach() 会导致程序崩溃。 此外…