【Qt之QWizardPage】使用

介绍

QWizardPage类是向导页面的基类。
QWizard表示一个向导。每个页面都是一个QWizardPage。当创建自己的向导时,可以直接使用QWizardPage,也可以子类化它以获得更多控制。
页面具有以下属性,由QWizard呈现:a titlea subTitlea set of pixmaps。有关详细信息,请参见向导页面元素。一旦将页面添加到向导中(使用QWizard :: addPage()QWizard :: setPage()),wizard()将返回指向相关的QWizard对象的指针。
页面提供了五个虚函数,可以重新实现以提供自定义行为:

  • initializePage()在用户单击向导的“下一步”按钮时调用以初始化页面的内容。如果您想从先前页面输入的内容中派生页面的默认值,则应该重新实现此函数。
  • cleanupPage()在用户单击向导的“返回”按钮时调用以重置页面的内容。
  • validatePage()在用户单击Next或Finish时验证页面。如果用户输入了不完整或无效的信息,通常会使用此函数显示错误消息。
  • nextId()返回下一页的ID。它在创建非线性向导时很有用,这些向导允许基于用户提供的信息进行不同的遍历路径。
  • isComplete()用于确定是否应启用或禁用“下一步”和/或“完成”按钮。如果重新实现isComplete(),还必须确保每当完成状态更改时发出completeChanged()。

通常,向导的“下一步”按钮和“完成”按钮是互斥的。如果isFinalPage()返回true,则可用Finish;否则,可用下一步。默认情况下,isFinalPage()仅在nextId()返回-1时为true。如果要在页面上同时显示“下一步”“完成”(允许用户执行“早期完成”),请在该页面上调用setFinalPage(true)。对于支持早期完成的向导,您可能还想在向导上设置HaveNextButtonOnLastPageHaveFinishButtonOnEarlyPages选项。

在许多向导中,页面的内容可能会影响后续页面的字段的默认值。为了方便页面之间的通信,QWizard支持“字段”机制,允许您在页面上注册字段(例如QLineEdit)并从任何页面访问其值。字段对整个向导程序是全局的,并使任何单个页面都可以访问存储在另一个页面中的信息,而无需将所有逻辑放入QWizard或页面明确知道彼此。使用registerField()注册字段,可以使用field()setField()随时访问它们。

常用方法

  1. virtual void initializePage(int id)
    这个虚函数由QWizard::initializePage()调用,以便在页面显示之前对其进行准备,或者由于QWizard::restart()被调用,或者由于用户单击Next而显示页面。(但是,如果设置了QWizard::IndependentPages选项,则仅在第一次显示页面时调用此函数。)
    通过重新实现这个函数,您可以确保页面的字段是基于先前页面中的字段正确初始化的。例如:
void OutputFilesPage: initializePage ()
{QString className = field("className").toString();headerLineEdit->setText(className.toLower() + ".h");implementationLineEdit->setText(className.toLower() + ".cpp");outputDirLineEdit - > setText (QDir:: toNativeSeparators (QDir: tempPath ()));
}

默认实现什么都不做。
2. void setButtonText(QWizard::WizardButton which, const QString &text)
将按钮上的文本设置为本页上的文本。
默认情况下,按钮上的文本依赖于QWizard::wizardStyle,但可以使用QWizard::setButtonText()为整个向导重新定义。

setButtonText(QWizard::NextButton, "hei");

在这里插入图片描述
3. void setCommitPage(bool commitPage)
如果commitPage为true,则将该页设置为提交页;否则,将其设置为普通页面。
提交页是表示不能通过单击“返回”或“取消”来撤消的操作的页面。
提交按钮取代提交页面上的Next按钮。单击此按钮只调用QWizard::next(),就像单击next一样。
直接从提交页面进入的页面会禁用后退按钮。

setCommitPage(true);

在这里插入图片描述

  1. void setFinalPage(bool finalPage)
    如果finalPage为true,则显式地将此页面设置为final。
    调用setFinalPage(true)后,isFinalPage()返回true, Finish按钮可见(如果isComplete()返回true则启用)。
    调用setFinalPage(false)后,如果nextId()返回-1,isFinalPage()返回true;否则,返回false。

示例

.h

#ifndef CLASSWIZARD_H
#define CLASSWIZARD_H#include <QWizard>QT_BEGIN_NAMESPACE
class QCheckBox;
class QGroupBox;
class QLabel;
class QLineEdit;
class QRadioButton;
QT_END_NAMESPACEclass ClassWizard : public QWizard
{Q_OBJECTpublic:ClassWizard(QWidget *parent = 0);void accept() override;
};class IntroPage : public QWizardPage
{Q_OBJECTpublic:IntroPage(QWidget *parent = 0);private:QLabel *label;
};class ClassInfoPage : public QWizardPage
{Q_OBJECTpublic:ClassInfoPage(QWidget *parent = 0);private:QLabel *classNameLabel;QLabel *baseClassLabel;QLineEdit *classNameLineEdit;QLineEdit *baseClassLineEdit;QCheckBox *qobjectMacroCheckBox;QGroupBox *groupBox;QRadioButton *qobjectCtorRadioButton;QRadioButton *qwidgetCtorRadioButton;QRadioButton *defaultCtorRadioButton;QCheckBox *copyCtorCheckBox;
};class CodeStylePage : public QWizardPage
{Q_OBJECTpublic:CodeStylePage(QWidget *parent = 0);protected:void initializePage() override;private:QCheckBox *commentCheckBox;QCheckBox *protectCheckBox;QCheckBox *includeBaseCheckBox;QLabel *macroNameLabel;QLabel *baseIncludeLabel;QLineEdit *macroNameLineEdit;QLineEdit *baseIncludeLineEdit;
};class OutputFilesPage : public QWizardPage
{Q_OBJECTpublic:OutputFilesPage(QWidget *parent = 0);protected:void initializePage() override;private:QLabel *outputDirLabel;QLabel *headerLabel;QLabel *implementationLabel;QLineEdit *outputDirLineEdit;QLineEdit *headerLineEdit;QLineEdit *implementationLineEdit;
};class ConclusionPage : public QWizardPage
{Q_OBJECTpublic:ConclusionPage(QWidget *parent = 0);protected:void initializePage() override;private:QLabel *label;
};#endif

.cpp

#include <QtWidgets>#include "classwizard.h"ClassWizard::ClassWizard(QWidget *parent): QWizard(parent)
{addPage(new IntroPage);addPage(new ClassInfoPage);addPage(new CodeStylePage);addPage(new OutputFilesPage);addPage(new ConclusionPage);setPixmap(QWizard::BannerPixmap, QPixmap(":/images/banner.png"));setPixmap(QWizard::BackgroundPixmap, QPixmap(":/images/background.png"));setWindowTitle(tr("Class Wizard"));
}void ClassWizard::accept()
{QByteArray className = field("className").toByteArray();QByteArray baseClass = field("baseClass").toByteArray();QByteArray macroName = field("macroName").toByteArray();QByteArray baseInclude = field("baseInclude").toByteArray();QString outputDir = field("outputDir").toString();QString header = field("header").toString();QString implementation = field("implementation").toString();QByteArray block;if (field("comment").toBool()) {block += "/*\n";block += "    " + header.toLatin1() + '\n';block += "*/\n";block += '\n';}if (field("protect").toBool()) {block += "#ifndef " + macroName + '\n';block += "#define " + macroName + '\n';block += '\n';}if (field("includeBase").toBool()) {block += "#include " + baseInclude + '\n';block += '\n';}block += "class " + className;if (!baseClass.isEmpty())block += " : public " + baseClass;block += '\n';block += "{\n";/* qmake ignore Q_OBJECT */if (field("qobjectMacro").toBool()) {block += "    Q_OBJECT\n";block += '\n';}block += "public:\n";if (field("qobjectCtor").toBool()) {block += "    " + className + "(QObject *parent = 0);\n";} else if (field("qwidgetCtor").toBool()) {block += "    " + className + "(QWidget *parent = 0);\n";} else if (field("defaultCtor").toBool()) {block += "    " + className + "();\n";if (field("copyCtor").toBool()) {block += "    " + className + "(const " + className + " &other);\n";block += '\n';block += "    " + className + " &operator=" + "(const " + className+ " &other);\n";}}block += "};\n";if (field("protect").toBool()) {block += '\n';block += "#endif\n";}QFile headerFile(outputDir + '/' + header);if (!headerFile.open(QFile::WriteOnly | QFile::Text)) {QMessageBox::warning(0, QObject::tr("Simple Wizard"),QObject::tr("Cannot write file %1:\n%2").arg(headerFile.fileName()).arg(headerFile.errorString()));return;}headerFile.write(block);block.clear();if (field("comment").toBool()) {block += "/*\n";block += "    " + implementation.toLatin1() + '\n';block += "*/\n";block += '\n';}block += "#include \"" + header.toLatin1() + "\"\n";block += '\n';if (field("qobjectCtor").toBool()) {block += className + "::" + className + "(QObject *parent)\n";block += "    : " + baseClass + "(parent)\n";block += "{\n";block += "}\n";} else if (field("qwidgetCtor").toBool()) {block += className + "::" + className + "(QWidget *parent)\n";block += "    : " + baseClass + "(parent)\n";block += "{\n";block += "}\n";} else if (field("defaultCtor").toBool()) {block += className + "::" + className + "()\n";block += "{\n";block += "    // missing code\n";block += "}\n";if (field("copyCtor").toBool()) {block += "\n";block += className + "::" + className + "(const " + className+ " &other)\n";block += "{\n";block += "    *this = other;\n";block += "}\n";block += '\n';block += className + " &" + className + "::operator=(const "+ className + " &other)\n";block += "{\n";if (!baseClass.isEmpty())block += "    " + baseClass + "::operator=(other);\n";block += "    // missing code\n";block += "    return *this;\n";block += "}\n";}}QFile implementationFile(outputDir + '/' + implementation);if (!implementationFile.open(QFile::WriteOnly | QFile::Text)) {QMessageBox::warning(0, QObject::tr("Simple Wizard"),QObject::tr("Cannot write file %1:\n%2").arg(implementationFile.fileName()).arg(implementationFile.errorString()));return;}implementationFile.write(block);QDialog::accept();
}IntroPage::IntroPage(QWidget *parent): QWizardPage(parent)
{setTitle(tr("Introduction"));setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark1.png"));label = new QLabel(tr("This wizard will generate a skeleton C++ class ""definition, including a few functions. You simply ""need to specify the class name and set a few ""options to produce a header file and an ""implementation file for your new C++ class."));label->setWordWrap(true);QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(label);setLayout(layout);
}ClassInfoPage::ClassInfoPage(QWidget *parent): QWizardPage(parent)
{setTitle(tr("Class Information"));setSubTitle(tr("Specify basic information about the class for which you ""want to generate skeleton source code files."));setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo1.png"));classNameLabel = new QLabel(tr("&Class name:"));classNameLineEdit = new QLineEdit;classNameLabel->setBuddy(classNameLineEdit);baseClassLabel = new QLabel(tr("B&ase class:"));baseClassLineEdit = new QLineEdit;baseClassLabel->setBuddy(baseClassLineEdit);qobjectMacroCheckBox = new QCheckBox(tr("Generate Q_OBJECT &macro"));groupBox = new QGroupBox(tr("C&onstructor"));qobjectCtorRadioButton = new QRadioButton(tr("&QObject-style constructor"));qwidgetCtorRadioButton = new QRadioButton(tr("Q&Widget-style constructor"));defaultCtorRadioButton = new QRadioButton(tr("&Default constructor"));copyCtorCheckBox = new QCheckBox(tr("&Generate copy constructor and ""operator="));defaultCtorRadioButton->setChecked(true);connect(defaultCtorRadioButton, &QAbstractButton::toggled,copyCtorCheckBox, &QWidget::setEnabled);registerField("className*", classNameLineEdit);registerField("baseClass", baseClassLineEdit);registerField("qobjectMacro", qobjectMacroCheckBox);registerField("qobjectCtor", qobjectCtorRadioButton);registerField("qwidgetCtor", qwidgetCtorRadioButton);registerField("defaultCtor", defaultCtorRadioButton);registerField("copyCtor", copyCtorCheckBox);QVBoxLayout *groupBoxLayout = new QVBoxLayout;groupBoxLayout->addWidget(qobjectCtorRadioButton);groupBoxLayout->addWidget(qwidgetCtorRadioButton);groupBoxLayout->addWidget(defaultCtorRadioButton);groupBoxLayout->addWidget(copyCtorCheckBox);groupBox->setLayout(groupBoxLayout);QGridLayout *layout = new QGridLayout;layout->addWidget(classNameLabel, 0, 0);layout->addWidget(classNameLineEdit, 0, 1);layout->addWidget(baseClassLabel, 1, 0);layout->addWidget(baseClassLineEdit, 1, 1);layout->addWidget(qobjectMacroCheckBox, 2, 0, 1, 2);layout->addWidget(groupBox, 3, 0, 1, 2);setLayout(layout);
}CodeStylePage::CodeStylePage(QWidget *parent): QWizardPage(parent)
{setTitle(tr("Code Style Options"));setSubTitle(tr("Choose the formatting of the generated code."));setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo2.png"));commentCheckBox = new QCheckBox(tr("&Start generated files with a ""comment"));commentCheckBox->setChecked(true);protectCheckBox = new QCheckBox(tr("&Protect header file against multiple ""inclusions"));protectCheckBox->setChecked(true);macroNameLabel = new QLabel(tr("&Macro name:"));macroNameLineEdit = new QLineEdit;macroNameLabel->setBuddy(macroNameLineEdit);includeBaseCheckBox = new QCheckBox(tr("&Include base class definition"));baseIncludeLabel = new QLabel(tr("Base class include:"));baseIncludeLineEdit = new QLineEdit;baseIncludeLabel->setBuddy(baseIncludeLineEdit);connect(protectCheckBox, &QAbstractButton::toggled,macroNameLabel, &QWidget::setEnabled);connect(protectCheckBox, &QAbstractButton::toggled,macroNameLineEdit, &QWidget::setEnabled);connect(includeBaseCheckBox, &QAbstractButton::toggled,baseIncludeLabel, &QWidget::setEnabled);connect(includeBaseCheckBox, &QAbstractButton::toggled,baseIncludeLineEdit, &QWidget::setEnabled);registerField("comment", commentCheckBox);registerField("protect", protectCheckBox);registerField("macroName", macroNameLineEdit);registerField("includeBase", includeBaseCheckBox);registerField("baseInclude", baseIncludeLineEdit);QGridLayout *layout = new QGridLayout;layout->setColumnMinimumWidth(0, 20);layout->addWidget(commentCheckBox, 0, 0, 1, 3);layout->addWidget(protectCheckBox, 1, 0, 1, 3);layout->addWidget(macroNameLabel, 2, 1);layout->addWidget(macroNameLineEdit, 2, 2);layout->addWidget(includeBaseCheckBox, 3, 0, 1, 3);layout->addWidget(baseIncludeLabel, 4, 1);layout->addWidget(baseIncludeLineEdit, 4, 2);setLayout(layout);
}void CodeStylePage::initializePage()
{QString className = field("className").toString();macroNameLineEdit->setText(className.toUpper() + "_H");QString baseClass = field("baseClass").toString();includeBaseCheckBox->setChecked(!baseClass.isEmpty());includeBaseCheckBox->setEnabled(!baseClass.isEmpty());baseIncludeLabel->setEnabled(!baseClass.isEmpty());baseIncludeLineEdit->setEnabled(!baseClass.isEmpty());QRegularExpression rx("Q[A-Z].*");if (baseClass.isEmpty()) {baseIncludeLineEdit->clear();} else if (rx.match(baseClass).hasMatch()) {baseIncludeLineEdit->setText('<' + baseClass + '>');} else {baseIncludeLineEdit->setText('"' + baseClass.toLower() + ".h\"");}
}OutputFilesPage::OutputFilesPage(QWidget *parent): QWizardPage(parent)
{setTitle(tr("Output Files"));setSubTitle(tr("Specify where you want the wizard to put the generated ""skeleton code."));setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo3.png"));outputDirLabel = new QLabel(tr("&Output directory:"));outputDirLineEdit = new QLineEdit;outputDirLabel->setBuddy(outputDirLineEdit);headerLabel = new QLabel(tr("&Header file name:"));headerLineEdit = new QLineEdit;headerLabel->setBuddy(headerLineEdit);implementationLabel = new QLabel(tr("&Implementation file name:"));implementationLineEdit = new QLineEdit;implementationLabel->setBuddy(implementationLineEdit);registerField("outputDir*", outputDirLineEdit);registerField("header*", headerLineEdit);registerField("implementation*", implementationLineEdit);QGridLayout *layout = new QGridLayout;layout->addWidget(outputDirLabel, 0, 0);layout->addWidget(outputDirLineEdit, 0, 1);layout->addWidget(headerLabel, 1, 0);layout->addWidget(headerLineEdit, 1, 1);layout->addWidget(implementationLabel, 2, 0);layout->addWidget(implementationLineEdit, 2, 1);setLayout(layout);
}void OutputFilesPage::initializePage()
{QString className = field("className").toString();headerLineEdit->setText(className.toLower() + ".h");implementationLineEdit->setText(className.toLower() + ".cpp");outputDirLineEdit->setText(QDir::toNativeSeparators(QDir::tempPath()));
}ConclusionPage::ConclusionPage(QWidget *parent): QWizardPage(parent)
{setTitle(tr("Conclusion"));setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark2.png"));label = new QLabel;label->setWordWrap(true);QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(label);setLayout(layout);
}void ConclusionPage::initializePage()
{QString finishText = wizard()->buttonText(QWizard::FinishButton);finishText.remove('&');label->setText(tr("Click %1 to generate the class skeleton.")

.main

#include <QApplication>
#include <QTranslator>
#include <QLocale>
#include <QLibraryInfo>#include "classwizard.h"int main(int argc, char *argv[])
{Q_INIT_RESOURCE(classwizard);QApplication app(argc, argv);#ifndef QT_NO_TRANSLATIONQString translatorFileName = QLatin1String("qt_");translatorFileName += QLocale::system().name();QTranslator *translator = new QTranslator(&app);if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))app.installTranslator(translator);
#endifClassWizard wizard;wizard.show();return app.exec();
}

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

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

相关文章

JVM虚拟机-虚拟机执行子系统-第6章 字节码指令

字节码指令 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字&#xff08;称为操作码&#xff0c;Opcode&#xff09;以及跟随其后的零至多个代表此操作所需的参数&#xff08;称为操作数&#xff0c;Operand&#xff09;构成。 字节码与数据类型 在Java虚拟…

uni-app 蓝牙打印, CPCL指令集使用

先上代码: GitHub - byc233518/uniapp-bluetooth-printer-demo: 使用uniApp 连接蓝牙打印机 Demo, CPCL 指令简单实用示例 (内含 芝珂,佳博,精臣 多个厂家指令集使用文档) 文件结构: ├── App.vue ├── CPCL 指令手册.pdf // 指令集参考手册 ├── LICENSE ├── R…

基于探路者算法优化概率神经网络PNN的分类预测 - 附代码

基于探路者算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于探路者算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于探路者优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

建造者模式(创建型)

目录 一、前言 二、建造者模式 三、链式编程实现建造者模式 四、总结 一、前言 当我们开发一个软件应用时&#xff0c;我们通常需要创建各种对象。有些对象是简单的&#xff0c;可以直接实例化&#xff0c;但有些对象则比较复杂&#xff0c;需要多个步骤才能创建完成。这时…

【备忘】websocket学习之挖坑埋自己

背景故事 以前没有好好学习过websocket&#xff0c;只知道它有什么用途&#xff0c;也知道是个好东西&#xff0c;平时在工作中没用过&#xff0c;所以对它并不知所以然。如今要做个自己的项目&#xff0c;要在付款的时候实时播报声音。自己是个开发者&#xff0c;也不想用别人…

解决升级docker导致的k8s崩溃问题

最近由于安装harbor升级了docker&#xff0c;然后发现k8s集群就启动不了。 查看kubelet日志发现&#xff1a;直接连不上apiserver了&#xff0c;直接connection refused 然后尝试启动apiserver容器直接报错&#xff1a;Error response from daemon: unknown or invalid runtim…

【原创】java+swing+mysql校园活动管理系统设计与实现

前言&#xff1a; 本文介绍了一个校园活动管理系统的设计与实现。该系统基于JavaSwing技术&#xff0c;采用C/S架构&#xff0c;使用Java语言开发&#xff0c;以MySQL作为数据库。系统实现了活动发布、活动报名、活动列表查看等功能&#xff0c;方便了校园活动的发布和管理&am…

线性表的概念

目录 1.什么叫线性表2.区分线性表的题 1.什么叫线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是…

餐厅订座预约小程序的效果如何

市场中无论哪种城市&#xff0c;餐厅非常多&#xff0c;一条不长的商业街&#xff0c;汇聚着数家餐饮品牌&#xff0c;且相互间竞争激烈&#xff0c;并且各个商家都希望用成本低高效率的方法引流及转化。 随着互联网深入各个行业&#xff0c;传统餐饮行业经营痛点不少。 传统餐…

前端---CSS的样式汇总

文章目录 CSS的样式元素的属性设置字体设置文字的粗细设置文字的颜色文本对齐文本修饰文本缩进行高设置背景背景的颜色背景的图片图片的属性平铺位置大小 圆角矩形 元素的显示模式行内元素和块级元素的转化弹性布局水平方向排列方式&#xff1a;justify-content垂直方向排序方式…

基于深度学习的活体人脸识别检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 活体人脸识别检测算法概述 4.2. 深度学习在活体人脸识别检测中的应用 4.3. 算法流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 …

分形图案是什么?fpmarkets这样进入市场

分形图案的构造相对简单。市场在某个时间段内&#xff0c;会呈现单向的变动&#xff0c;要么持续上涨&#xff0c;要么持续下跌。观察这种趋势&#xff0c;并预测市场将呈现上涨态势后&#xff0c;过了一段时间&#xff0c;当所有有意向的买家都已经完成购买行为(即在价格上涨过…

EasyPOI实现excel文件导出

EasyPOI真的是一款非常好用的文件导出工具&#xff0c;相较于传统的一行一列的数据导出&#xff0c;这种以实体类绑定生成的方式真的非常方便&#xff0c;也希望大家能够了解、掌握其使用方法&#xff0c;下面就用一个实例来简单介绍一下EasyPOI的使用。 1.导入依赖 <!-- e…

C语言每日一题(31)相交链表

力扣160.相交链表 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意…

新手老师怎么发布班级查询?

现在科技发展飞快&#xff0c;班级查询系统已经成为了许多学校必备的教务工具。可以让学生们快速查找到班级的各项信息&#xff0c;包括但不限于课程安排、考试成绩、分班等。对老师来说&#xff0c;班级查询系统可以提高工作效率&#xff0c;减少重复劳动&#xff0c;学生或者…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

ubuntu中cuda12.1配置(之前存在11.1版本的cuda)(同时配置两个版本)

ubuntu中cuda12.1配置 由于YOLOv8项目中Pytorch版本需要cuda12.1版本 在官网下载12.1版本的deb包 官网地址 sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda然后需要修改bashrc文件&#xff08;隐藏文件&#xff09; 添加 exp…

关系代数、SQL语句和Go语言示例

近些年&#xff0c;数据库领域发展日新月异&#xff0c;除传统的关系型数据库外&#xff0c;还出现了许多新型的数据库&#xff0c;比如&#xff1a;以HBase、Cassandra、MongoDB为代表的NoSQL数据库&#xff0c;以InfluxDB、TDEngine为代表的时序数据[1]库&#xff0c;以Neo4J…

jQuery UI简单的讲解

我们先进入一下问答时间&#xff0c;你都知道多少呢&#xff1f; &#xff08;1&#xff09;什么是jQuery UI 呢&#xff1f; 解答&#xff1a;jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们…

无需公众号实现微信JSSDK分享卡片!Safari浏览器分享到微信自动成卡片!

摘要 要在微信分享卡片&#xff0c;需要接入微信自家的JSSDK&#xff0c;比较麻烦&#xff0c;还需要认证公众号&#xff0c;但是如果你没有这样的条件&#xff0c;那么你也可以试试使用iOS的Safari浏览器轻松实现&#xff0c;只需要在html中加入3个meta即可。 代码 <!DO…