Qt窗口

QMainWindow

Qt 窗⼝ 是通过 QMainWindow类 来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃ QWidget 类,并且提供了⼀个预定义的 布局。QMainWindow 包含 ⼀个菜单栏(menu bar)多个⼯具栏(tool bars)、多个浮动窗⼝(铆 接部件)(dock widgets)、⼀个状态栏(status bar) 和⼀个 中⼼部件(central widget),它是许多应 ⽤程序的基础,如⽂本编辑器,图⽚编辑器等。如下图为 QMainwindow 中 各组件所处的位置:

image.png

菜单栏

一个窗口中只能有一个菜单栏。Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。位于主窗⼝顶部、主窗⼝标题栏下⾯。

菜单栏中包含菜单。菜单中包含菜单项。

image.png

创建菜单栏

  • ⽅式⼀:菜单栏的创建可以借助于 QMainWindow类 提供的 menuBar() 函数来实现。menubar()函数原型如下:
QMenuBar * menuBar() const

在窗口中添加菜单栏

QMenuBar* menu_bar = new QMenuBar(this);//在堆区创建菜单栏
this->setMenuBar(menu_bar);//将菜单栏添加到窗口中。

注意:
只添加菜单栏不添加菜单 在窗口中是不会显示菜单栏的。

在菜单栏中添加菜单

创建菜单,并通过 QMenu 提供的 addMenu() 函数 来添加菜单。

//创建菜单栏
QMenuBar* menu_bar = new QMenuBar(this);
//将菜单栏添加到窗口中
this->setMenuBar(menu_bar);
//创建菜单
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("帮助");
//将菜单添加到菜单栏中
menu_bar->addMenu(menu1);
menu_bar->addMenu(menu2);
menu_bar->addMenu(menu3);

效果如图:

image.png

创建菜单项

在 Qt 中,并没有专⻔的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜单项。

//创建菜单栏
QMenuBar* menu_bar = new QMenuBar(this);
//将菜单栏添加到窗口中
this->setMenuBar(menu_bar);
//创建菜单
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("帮助");
//将菜单添加到菜单栏中
menu_bar->addMenu(menu1);
menu_bar->addMenu(menu2);
menu_bar->addMenu(menu3);
//创建菜单项
QAction* action1 = new QAction("打开");
QAction* action2 = new QAction("新建");
QAction* action3 = new QAction("关闭");
//将菜单项添加到菜单中
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);

效果如图:
image.png

小tip:在Qt中,一般只能出现一个的控件使用set,而可以出现多个的控件使用add进行添加。

在菜单项之间添加分割线

以qt creatot为例。红色标注的就是分隔线。
image.png
qt支持在菜单项之间可以添加分割线。分割线如下图所⽰,添加分割线是通过 QMenu 类 提供的 addSeparator() 函数来实现;
比如对上面的代码打开和新建之间添加分隔线。

//创建菜单栏
QMenuBar* menu_bar = new QMenuBar(this);
//将菜单栏添加到窗口中
this->setMenuBar(menu_bar);
//创建菜单
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("帮助");
//将菜单添加到菜单栏中
menu_bar->addMenu(menu1);
menu_bar->addMenu(menu2);
menu_bar->addMenu(menu3);
//创建菜单项
QAction* action1 = new QAction("打开");
QAction* action2 = new QAction("新建");
QAction* action3 = new QAction("关闭");
//将菜单项添加到菜单中
menu1->addAction(action1);
menu1->addSeparator();//在打开和新建之间添加分隔线
menu1->addAction(action2);
menu1->addAction(action3);

运行效果:

image.png

工具栏

⼯具栏是应⽤程序中集成各种功能实现快捷键使用的⼀个区域。可以有多个,也可以没有,它并不是 应⽤程序中必须存在的组件。它是⼀个可移动的组件,它的元素可以是各种窗⼝组件,它的元素通常 以图标按钮的⽅式存在。如下图为⼯具栏的⽰意图:

image.png

创建工具栏

调⽤ QMainWindow类 的 addToolBar() 函数来创建⼯具栏,每增加⼀个⼯具栏都需要调⽤⼀次该函 数。
比如在窗口中添加两个工具栏(工具栏并不是唯一的可以有多个)。

//添加工具栏
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
//将工具栏添加到窗口中
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);

运行结果:

image.png
这是两个工具栏,这两个工具栏默认可以停靠到窗口的任意地方。如下:

recording.gif

设置停靠位置

⼯具栏停靠位置的设置有两种⽅式。⼀种是在创建⼯具栏的同时指定停靠的位置,另⼀种是通过 QToolBar类 提供的 setAllowedAreas()函数 来设置。

  • ⽅式⼀:创建⼯具栏的同时指定其停靠的位置。
    比如创建工具栏时指定工具栏在左侧显示
//添加工具栏
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
//将工具栏指定左侧显示
this->addToolBar(Qt::LeftToolBarArea,toolbar1);
//将工具指定右侧显示
this->addToolBar(Qt::RightToolBarArea,toolbar2);

效果如下:

image.png

  • ⽅式⼆:使⽤ QToolBar类 提供的 setAllowedAreas()函数 设置停靠位置。如下⽰例
//添加工具栏
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
//只允许在左侧显示
this->addToolBar(toolbar1);
toolbar1->setAllowedAreas(Qt::LeftToolBarArea);
//只允许在右侧显示
this->addToolBar(toolbar2);
toolbar2->setAllowedAreas(Qt::RightToolBarArea);

运行效果:

recording.gif
注意:
在创建⼯具栏的同时指定其停靠的位置,指的是程序运行时⼯具栏默认所在的位置;⽽使⽤ setAllowedAreas()函数设置停靠位置,指的是⼯具栏允许其所能停靠的位置。
其中可以设置 的位置包括:

  • Qt::LeftToolBarArea 停靠在左侧
  • Qt::RightToolBarArea 停靠在右侧
  • Qt::TopToolBarArea 停靠在顶部
  • Qt::BottomToolBarArea 停靠在底部
  • Qt::AllToolBarAreas 以上四个位置都可停靠

设置浮动属性

⼯具栏的浮动属性可以通过 QToolBar类 提供的 setFloatable()函数 来设置。

  • ture为允许浮动,false不允许浮动。

比如:

//添加工具栏
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
//允许浮动
this->addToolBar(toolbar1);
toolbar1->setFloatable(true);
//不允许浮动
this->addToolBar(toolbar2);
toolbar2->setFloatable(false);

运行效果:

recording.gif

设置移动属性

设置⼯具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置。

//添加工具栏
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
//允许移动
this->addToolBar(toolbar1);
toolbar1->setMovable(true);
//不允许移动
this->addToolBar(toolbar2);
toolbar2->setMovable(false);

效果如下:

recording.gif
若设置⼯具栏为不移动状态,则设置其停靠位置的操作就不会⽣效,所以设置⼯具栏 的移动属性类似于总开关的效果。

在工具栏中添加快捷项和在菜单中添加菜单项是一样的,都是使用QAction进行添加的。

状态栏

状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状 态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。 在状态栏中可以显⽰的消息类型有:

  • 实时消息:如当前程序状态
  • 永久消息:如程序版本号,机构名称
  • 进度消息:如进度条提⽰,百分百提⽰
    以word为例下图中红色标准的就是状态栏

image.png

创建状态栏

状态栏的创建是通过 QStatusBar类 提供的 statusBar() 函数来创建;⽰例如下:

//创建状态栏
QStatusBar *statusbar = new QStatusBar(this);
//将状态栏添加到窗口中
this->setStatusBar(statusbar);

效果如下:

image.png
状态栏中什么都没有,就什么都不会显示,只显示右下角的部分。

在状态栏中显⽰实时消息

在状态栏中显⽰实时消息是通过 showMessage() 函数来实现,⽰例如下:

//创建状态栏
QStatusBar *statusbar = new QStatusBar(this);
//将状态栏添加到窗口中
this->setStatusBar(statusbar);
//在状态栏中显示实时信息
statusbar->showMessage("Hello QT!!!");

运行效果:

image.png
还有一个重载版本,可以设置显示的时间。
比如:
显示大约2秒的Hello QT!!!

statusbar->showMessage("Hello QT!!!",2000);//单位是毫秒

在状态栏中显⽰永久消息

在状态栏中可以显⽰永久消息,此处的永久消息是通过标签QLabel来显⽰的;⽰例如下:

//创建状态栏
QStatusBar *statusbar = new QStatusBar(this);
//将状态栏添加到窗口中
this->setStatusBar(statusbar);
//在状态栏中显示永久信息
QLabel * label = new QLabel("Hello QT!!!",this);
//将label添加到状态栏中
statusbar->addWidget(label);

效果如下:

image.png
也可以将消息放到右侧

statusbar->addPermanentWidget(label);

浮动窗口

在 Qt 中,浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗 ⼝⼀般是位于核⼼部件的周围,可以有多个。

使用visual studio的话就经常使用这个功能。比如下面动图中就是浮动窗口(顺便吐槽一下,vs到2024年现在还没有浮动窗口)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建浮动窗口

//创建浮动窗口
QDockWidget* dockwidget = new QDockWidget(this);
//将浮动窗口置于当前窗口
addDockWidget(Qt::BottomDockWidgetArea,dockwidget);

运行效果:

recording.gif

设置浮动窗口停靠位置

浮动窗⼝是位于中⼼部件的周围。可以通过 QDockWidget类 中提供setAllowedAreas() 函数设置其 允许停靠的位置。其中可以设置允许停靠的位置有:

  • Qt::LeftDockWidgetArea 停靠在左侧
  • Qt::RightDockWidgetArea 停靠在右侧
  • Qt::TopDockWidgetArea 停靠在顶部
  • Qt::BottomDockWidgetArea 停靠在底部
  • Qt::AllDockWidgetAreas 以上四个位置都可停靠

⽰例如下:设置浮动窗⼝只允许上下停靠

//创建浮动窗口
QDockWidget* dockwidget = new QDockWidget(this);
//将浮动窗口置于当前窗口
addDockWidget(Qt::BottomDockWidgetArea,dockwidget);
//只允许上下停靠
dockwidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);

效果:

recording.gif

对话框

对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框 中。对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互。Qt常 ⽤的内置对话框有:QFiledialog(⽂件对话框)QColorDialog(颜⾊对话框)QFontDialog (字体对话框)QInputDialog (输⼊对话框) QMessageBox(消息框)

对话框分类

对话框分为 模态对话框⾮模态对话框。

模态对话框

模态对话框指的是:显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框。使⽤ QDialog::exec()函数调⽤。
比如在world中 可能会遇到这种情况:
另存为对话框弹出时,必须操作这个对话框,不能操作其他对话框。这就是模态对话框。
recording.gif

模态对话框适⽤于必须依赖⽤⼾选择的场合,⽐如消息显⽰,⽂件选择,打印设置等。
使用示例:

QPushButton* pushbutton = new QPushButton("save as",this);
//点击按钮 创建模态对话框
connect(pushbutton,&QPushButton::clicked,this,[&](){QDialog dlg(this);//对话框大小重置为200*200dlg.resize(200,200);//对话框以模态对框的形式显示dlg.exec();
});

运行效果:

recording.gif

非模态对话框

⾮模态对话框显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种⾮阻塞式对话框,使⽤ QDialog::show()函数调⽤。

⾮模态对话框⼀般在堆上创建,这是因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过。同 时还需要设置 Qt:WA_DeleteOnClose 属性,⽬的是:当创建多个⾮模态对话框时(如打开了多个⾮ 模态窗⼝),这个属性的作用是告诉 Qt,在对话框关闭后,自动删除对话框对象。为了避免内存泄漏要设置此属性。

⾮模态对话框适⽤于特殊功能设置的场合,⽐如查找操作,属性设置等。

使用示例:

QPushButton* pushbutton = new QPushButton("save as",this);
//点击按钮 创建非模态对话框
connect(pushbutton,&QPushButton::clicked,this,[&](){QDialog *dlg = new QDialog(this);//对话框大小重置为200*200dlg->resize(200,200);//设置 Qt:WA_DeleteOnClose 属性dlg->setAttribute(Qt::WA_DeleteOnClose);//对话框以模态对框的形式显示dlg->show();
});

运行效果:

recording.gif

Qt内置对话框

Qt 提供了多种可复⽤的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog类。常⽤ 标准对话框如下:

image.png

消息对话框 QMessageBox

消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息,强制⽤⼾进 ⾏选择操作。
QMessageBox类 中定义了静态成员函数,可以直接调⽤创建不同⻛格的消息对话框,其中包括:

image.png

类型用途
Question⽤于正常操作过程中的提问
Information⽤于报告正常运⾏信息
Warning⽤于报告⾮关键错误
Critical⽤于报告严重错误

⽰例:问题提⽰消息对话框

QPushButton* pushbutton = new QPushButton("QMessageBox", this);// 创建消息对话框并用
QMessageBox* messagebox = new QMessageBox(this);
//设置对话框标题
messagebox->setWindowTitle("Warning Message");
//设置对话框内容
messagebox->setText("Error Message");
//设置对话框消息类型
messagebox->setIcon(QMessageBox::Question);
//在对话框上添加按钮
messagebox->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);connect(pushbutton, &QPushButton::clicked, [messagebox]() {messagebox->show();
});

运行结果:

recording.gif
注意:lambda表达式一定要用传值,不能传引用,传引用的话就会对messagebox对象析构两次,程序就会崩溃。

其余的使用基本都一样。

颜⾊对话框 QColorDialog

颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。颜⾊对话框如下图⽰

image.png
常⽤⽅法介绍

  • 1、 QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置⽗对象
  • 2、 QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor 对象设置默认颜⾊和⽗对象
  • 3、 void setCurrentColor(const QColor &color) //设置当前颜⾊对话框
  • 4、 QColor currentColor() const //获取当前颜⾊对话框
  • 5、 QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜⾊ 选择对话框,并返回⼀个QColor对象
    • initial:设置默认颜⾊
    • parent:设置⽗对象
    • title:设置对话框标题
    • options:设置选项
  • 6、 void open(QObject *receiver, const char *member)//打开颜⾊对话框
    使用示例:
QPushButton* pushbutton = new QPushButton("QColorDialog", this);
//创建颜色对话框
QColorDialog* colordialog = new QColorDialog(this);connect(pushbutton, &QPushButton::clicked, [colordialog]() {//打开颜色对话框 并设置默认颜色为红色QColor color = colordialog->getColor(QColor(255,0,0));
});

运行结果:

image.png

示例

QPushButton* pushbutton = new QPushButton("QColorDialog", this);
//创建颜色对话框
QColorDialog* colordialog = new QColorDialog(this);connect(pushbutton, &QPushButton::clicked, [colordialog]() {//设置对话框的颜色colordialog->setCurrentColor(QColor(255,100,190));colordialog->open();
});

运行结果:
image.png

⽂件对话框 QFileDialog

⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。

常⽤⽅法介绍:

  • 1、打开⽂件(⼀次只能打开⼀个⽂件)
   QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
  • 2、打开多个⽂件(⼀次可以打开多个⽂件)
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
  • 3、保存文件
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
  • 参数说明
    • 参数1:parent ⽗亲
    • 参数2:caption 对话框标题
    • 参数3:dir 默认打开的路径
    • 参数4:filter ⽂件过滤器

示例:打开文件

    QPushButton* pushbutton = new QPushButton("QColorDialog", this);QFileDialog* filedialog = new QFileDialog(this);connect(pushbutton, &QPushButton::clicked, [=]() {QString filename = filedialog->getOpenFileName(this,"文件",//设置对话框标题"Z:\gitee-study\QT\Qt_Windows",//设置默认打开路径"*.jpg" //中保留jpg文件);qDebug() << filename;});
}

运行结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入对话框

Qt 中提供了预定义的输⼊对话框类:QInputDialog,⽤于进⾏临时数据输⼊的场合。
常⽤⽅法介绍:

  • 1、双精度浮点型输⼊数据对话框
double getDouble (QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
  • 2、整型输⼊数据对话框
int getInt (QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
  • 3、选择条⽬型输⼊数据框
QString getItem (QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
  • 参数说明:
    • parent:⽗亲
    • title:对话框标题
    • label:对话框标签
    • items:可供选择的条⽬

⽰例1:浮点型数据输⼊对话框

QPushButton* pushbutton  = new QPushButton("Input", this);
//创建输入框
QInputDialog* inputdialog = new QInputDialog(this);
connect(pushbutton,&QPushButton::clicked,[=](){//双精度浮点型输⼊数据对话框double d = inputdialog->getDouble(this,"input","double");qDebug() << d ;
});

运行结果:
recording.gif
⽰例2:打开选择条⽬对话框

QPushButton* pushbutton  = new QPushButton("Input", this);
//创建输入框
QInputDialog* inputdialog = new QInputDialog(this);
connect(pushbutton,&QPushButton::clicked,[=](){QStringList items;//添加条目items << tr("2020") << tr("2021");QString item = inputdialog->getItem(this,"input","item",items);});

运行结果:

recording.gif
小tip:在Qt中,一般只能出现一个的控件使用set添加,而可以出现多个的控件使用add进行添加。

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

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

相关文章

JavaScript底层原理(栈、堆、主线程、任务队列、事件循环机制)

1. 栈(heap)和堆(stack) 栈是栈内存的简称&#xff0c;堆是堆内存的简称。顾名思义&#xff0c;内存是干啥的&#xff1f;内存就是用来存放数据的。 栈 栈只有一个入口&#xff0c;同时也是出口&#xff0c;数据遵循先进后出、后进先出的原则。 栈用于存放基本类型数据和引用…

安装库后JupyterLab一直报ModuleNotFoundError问题解决

背景&#xff1a; 先安装的Python3.10&#xff0c;安装在默认路径&#xff1a; C:\Users\#用户名省略#\AppData\Local\Programs\Python\Python310\ 后安装的Anaconda&#xff0c;更改过路径在D盘&#xff1a; D:\ProgramData\anaconda3 此时C盘Python安装路径下Scripts文件…

YAW-100B全自动压力试验机

一、简介 微机控制压力试验机测控系统采用高精度数字伺服阀&#xff0c;具有力闭环控制功能&#xff0c;能够实现等载荷速率加载或等应力速率加载&#xff0c;控制精度高&#xff0c;可靠性好&#xff0c;完全满足GB/T 17617《水泥胶沙强度检验方法&#xff08;ISO方法&#x…

matlab学习004-使用matlab绘制卷积波形图

目录 1&#xff0c;序列&#xff1a;x(n)u(n-2)-u(n-10)&#xff0c;h(n)((0.9)^n)*u(n) 1&#xff09;前期基础 ①conv函数 ②离散单位阶跃信号 2&#xff09;波形图 3&#xff09;代码 ①使用input方法 ②代码改进【推荐使用】 2&#xff0c;信号x(t)2[u(t1)-u(t…

红黑树笔记

2-3树 -> 左倾红黑树 红黑树实际上是2-3树的一种基于BST的实现。普通二叉搜索树&#xff08;BST&#xff09;中的每一个节点&#xff0c;只有一个键&#xff0c;两条链接&#xff08;两个子节点&#xff09;&#xff0c;这种节点被称为2节点。2-3树中&#xff0c;引入了一个…

【智能算法】土拨鼠优化算法(PDO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年&#xff0c;AE Ezugwu等人受到土拨鼠觅食行为与自然行为启发&#xff0c;提出了土拨鼠优化算法&#xff08;Prairie Dog Optimization algorithm, PDO&#xff09;。 2.算法原理 2.1算法思…

云服务器搭建XSS-platform、DVWA靶机和Permeate论坛

目录 前言准备环境安装步骤一、 部署MySQL二、 系统部署三、系统安装主页介绍 前言 我发现目前网上的xss-platform的搭建教程都是基于本地搭建的&#xff0c;这样搭建好的xss平台只能在本地使用&#xff0c;无法测试别的网站。而网络上的大部分xss平台又几乎都是收费的&#x…

vue3学习笔记-快速上手

创建第一个vue3的应用 之前看书学习vue,书籍对应的版本是vue2,今天群里看小伙伴聊天&#xff0c;觉得他们说得对 &#xff0c;反正是从零开始学&#xff0c;而且vue2都不维护了&#xff0c;那为什么不直接学习vue3呢&#xff0c;于是乎&#xff0c;又开启了从0学vue3之路。 参考…

2024Xtu程设第一次练习题解

程设练习题谢大会专门查重 1.1531奇怪的数字 题目让我们从小到大输出1e6以内所有的答案&#xff0c;其实也没什么好的思路 就是将一个数n的所有位都拆出来&#xff0c;遍历这些位&#xff08;每次取一个x&#xff09;&#xff0c;然后通过作除法&#xff08;y n / x&#xf…

java多态知识

目录 一、定义 二、注意事项 三、多态的好处 四、多态的弊端以及解决办法 一、定义 多态定义:多态是在继承/实现情况下的一种现象&#xff0c;表现为:对象多态、行为多态。 对象多态&#xff1a;都是同一对象&#xff0c;表现出不同角色&#xff0c;比如小明&#xff0c;…

java:SpringBoot入门

Spring 提供若干子项目,每个项目用于完成特定功能 Spring Boot 可以简化配置并且快速开发 SpringBootWeb快速入门 创建Springboot模块并使用Springweb依赖 在类上添加注解 RestController可以将字符串自动转成json返回数据给页面 再在方法上添加注解 RequestMapping(&…

python应用-socket网络编程(2)

socket 是 Python 标准库中的一个模块&#xff0c;它提供了低级别的网络通信接口。使用 socket 模块&#xff0c;你可以创建客户端和服务器应用程序&#xff0c;以便在网络上进行数据交换。 接着上文我们介绍下socket模块其他的一些函数。 目录 gettimeout() 和settimeout()…

0422empAJAX项目

数据库字段&#xff1a; 多条件查询&#xff1b; 分页查询&#xff1b; 添加图片&#xff1b; ajax离职操作&#xff1b; 删除选项&#xff0c;点击离职操作后仍然可实现删除选项

项目部署总结

1、安装jdk 第一步&#xff1a;上传jdk压缩安装包到服务器 第二步&#xff1a;将压缩安装包解压 tar -xvf jdk-8uXXX-linux-x64.tar.gz 第三步&#xff1a;配置环境变量 编辑/etc/profile文件&#xff0c;在文件末尾添加以下内容&#xff1a; export JAVA_HOME/path/to/j…

鉴权到底做什么

两种方案&#xff1a; 将 token 放在 cookie 里&#xff1b;将 token 放在请求头里&#xff0c;用 Authorization 字段。 无论对于前端还是后端而言&#xff0c;这两种方案都是各有利弊的&#xff0c;下面稍微讲几点&#xff0c;实际开发中根据需求来选用即可。 将 token 放在…

进程控制5 - exit()退出+子进程被收养+僵死进程

我们应当知道的是&#xff0c;在用fork创建子进程后&#xff0c;父子进程的执行的先后顺序是不定的&#xff0c;这时&#xff0c;我们可以用wait函数&#xff0c;wait()会暂停当前进程的执行&#xff0c;直到有信号到来或者子进程结束。总的来说&#xff0c;wait()的作用就是阻…

C语言编译的优化等级应该选哪个?O0、O1、O2还是O3

在使用IDE开发STM32程序时&#xff0c;IDE一般都会提供优化等级设置的选项&#xff0c;例如下图中KEIL软件优化等级的设置。 从上图中也可以看出&#xff0c;设置不同的优化等级&#xff0c;实际上是修改了编译器的编译参数。这个编译器是由ARM公司提供的C/C编译器armclang或者…

微信小程序Vue+nodejs+uniapp课堂教学辅助在线学习系统

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 后台主要实现功能&#xff1a;一、用户的管理(用户的信息管理) 二、 课程的管理&#xff08;课程发布&#xff0c;课后成绩的查看&#xff0c…

DAY 5

1. 2. #include <iostream>using namespace std; class Person {string name;int *age;public:Person():name("zhangsan"),age(new int (18)){cout << "Person的无参函数" << endl;}Person(string name,int *age):name("zhangsan&q…

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注&#xff0c;数据集制作不易&#xff0c;请尊重版权&#xff08;稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫&#xff09; 如果需要yolv8检测模型和数据集放在一起的压缩包&#xff0c;可以关注&#xff1a;最新最…