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.rhkb.cn/news/315762.html

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

相关文章

Python并发编程:揭开多线程与异步编程的神秘面纱

第一章&#xff1a;并发编程导论 1.1 并发与并行概念解析 1.1.1 并发性与并行性的区别 想象一下繁忙的厨房中多位厨师同时准备不同的菜肴——即使他们共享有限的空间和资源&#xff0c;也能协同工作&#xff0c;这就是并发性的一个生动比喻。并发性意味着多个任务在同一时间…

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法&#xff1a;我们找到一个字符串的全排列&#xff0c;然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列&#xff0c;所以我们知道两个字符串对应的字符出现的个数相同&#xff0c;那么…

常用图像加密技术-流密码异或加密

异或加密是最常用的一种加密方式&#xff0c;广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作&#xff0c;使得原像素值发生变化&#xff0c;进而使得图像内容发生变化&#xff0c;达到保护图像内容的目的。 该加密方法是以图像…

Aiseesoft Blu-ray Player for Mac:蓝光播放器

Aiseesoft Blu-ray Player for Mac是一款功能强大且易于使用的蓝光播放器&#xff0c;专为Mac用户打造。它以其卓越的性能和简洁的操作界面&#xff0c;为用户带来了全新的高清蓝光播放体验。 Aiseesoft Blu-ray Player for Mac v6.6.50激活版下载 这款软件支持播放任何高质量的…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 打家劫舍 II(难度⭐⭐)(67)

1. 题目解析 题目链接&#xff1a;213. 打家劫舍 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题是经典的“打家劫舍”问题的变种&#xff0c;原问题是在单排房屋中进行偷窃&#xff0c;而这个问题则是在…

机器学习:基于Sklearn、XGBoost框架,使用XGBClassifier、支持向量分类器和决策树分类器预测乳腺癌是良性还是恶性

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

数据挖掘实验一

一、实验环境及背景 使用软件&#xff1a; Anaconda3 Jupyter Notebook 实验内容&#xff1a; 1.使用Tushare或者其他手段获取任意两支股票近三个月的交易数据。做出收盘价的变动图像。2.使用Pandas_datareader获取世界银行数据库中美国&#xff08;USA&#xff09;、瑞典&…

Linux-管道通信

1. 管道概念 管道&#xff0c;是进程间通信的一种方式&#xff0c;在Linux命令中“ | ”就是一种管道&#xff0c;它可以&#xff0c;连接前一条命令&#xff0c;和后一条命令&#xff0c;把前面命令处理完的内容交给后面&#xff0c;例如 cat filename | grep hello …

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

C# GetField 方法应用实例

目录 关于 C# Type 类 GetField 方法应用 应用举例 心理CT设计题 类设计 DPCT类实现代码 小结 关于 C# Type 类 Type表示类型声明&#xff1a;类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义&#xff0c;以及开放或封闭构造的泛型类型。调用 t…

新媒体运营-----短视频运营-----PR视频剪辑----视频调色

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1. Lumetri调色&#xff0c;明暗对比度2. Lumetri调色&#xff0c;创意与矢量示波器2.1 创意2.2 矢量示波器 3. L…

前端开发攻略---用原生JS在网页中也能实现语音识别

1、语音识别的过程 语音识别涉及三个过程&#xff1a;首先&#xff0c;需要设备的麦克风接收这段语音&#xff1b;其次&#xff0c;语音识别服务器会根据一系列语法 (基本上&#xff0c;语法是你希望在具体的应用中能够识别出来的词汇) 来检查这段语音&#xff1b;最后&#xf…

纯js对比excel小工具

如何使用JavaScript和xlsx.js实现Excel文件对比&#xff1a;实战指南 在日常办公或数据分析工作中&#xff0c;我们经常需要比较两个Excel文件中的数据差异。手动对比不仅耗时费力&#xff0c;还容易出错。本文将带你通过一个简单的网页应用&#xff0c;利用JavaScript和开源库…

【极速前进】20240422:预训练RHO-1、合成数据CodecLM、网页到HTML数据集、MLLM消融实验MM1、Branch-Train-Mix

一、RHO-1&#xff1a;不是所有的token都是必须的 论文地址&#xff1a;https://arxiv.org/pdf/2404.07965.pdf 1. 不是所有token均相等&#xff1a;token损失值的训练动态。 ​ 使用来自OpenWebMath的15B token来持续预训练Tinyllama-1B&#xff0c;每1B token保存一个che…

GPT学术优化推荐(gpt_academic )

GPT学术优化 (GPT Academic):支持一键润色、一键中英互译、一键代码解释、chat分析报告生成、PDF论文全文翻译功能、互联网信息聚合GPT等等 ChatGPT/GLM提供图形交互界面&#xff0c;特别优化论文阅读/润色/写作体验&#xff0c;模块化设计&#xff0c;支持自定义快捷按钮&…

[iOS]CocoaPods安装和使用

1.了解brew、rvm、ruby、gem、cocaspods之间的关系 在 macOS 环境中&#xff0c;Brew、RVM、Ruby、Gem 和 CocoaPods 之间存在以下关系&#xff1a; Homebrew (Brew)&#xff1a;Homebrew 是 macOS 上的包管理器&#xff0c;用于安装和管理各种开源软件包。它使您能够轻松地从…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

【AIGC调研系列】Sora级别的国产视频大模型-Vidu

Vidu能够达到Sora级别的标准。Vidu被多个来源认为是国内首个Sora级别的视频大模型[2][3][4]。它采用了团队原创的Diffusion与Transformer融合的架构U-ViT&#xff0c;能够生成长达16秒、分辨率高达1080P的高清视频内容[1][6]。此外&#xff0c;Vidu的一致性、运动幅度都达到了S…

HEVC/H.265视频编解码学习笔记–框架及块划分关系

前言 由于本人在学习视频的过程中&#xff0c;觉得分块单元太多搞不清楚其关系&#xff0c;因此本文着重记录这些分块单元的概念以及关联。 一、框架 视频为一帧一帧的图像&#xff0c;其编码的主要核心是压缩空间以及时间上的冗余。因此&#xff0c;视频编码有帧内预测和帧间…

使用docker搭建GitLab个人开发项目私服

一、安装docker 1.更新系统 dnf update # 最后出现这个标识就说明更新系统成功 Complete!2.添加docker源 dnf config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo # 最后出现这个标识就说明添加成功 Adding repo from: https://download.…