十、基本对话框大集合(Qt5 GUI系列)

 


目录

一、设计需求

二、实现代码

三、代码解析

四、总结


一、设计需求

        Qt提供了很多标准的对话框。例如标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框 (QFontDialog)、标准输入对话框 (QInputDialog) 及消息对话框 (QMessageBox)。本文展示各种对话框的简单使用方法以及自定义消息框。

二、实现代码

main文件:

#include "dialog.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

dialog文件:

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QLineEdit>
#include <QGridLayout>
#include "inputdlg.h"
#include "msgboxdlg.h"
class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();
private:QPushButton *fileBtn;QLineEdit *fileLineEdit;QGridLayout *mainLayout;QPushButton *colorBtn;QFrame *colorFrame;QPushButton *fontBtn;QLineEdit *fontLineEdit;QPushButton *inputBtn;InputDlg *inputDlg;QPushButton *MsgBtn;MsgBoxDlg *msgDlg;QPushButton *CustomBtn;QLabel *label;
private slots:void showFile();void showColor();void showFont();void showInputDlg();void showMsgDlg();void showCustomDlg();
};#endif // DIALOG_H
#include "dialog.h"
#include<QGridLayout>
#include<QFileDialog>
#include<QPushButton>
#include <QColorDialog>
#include <QFontDialog>
#include <QMessageBox>
Dialog::Dialog(QWidget *parent): QDialog(parent)
{//设置标题setWindowTitle(tr("各种标准对话框的实例"));//标准文件对话框fileBtn=new QPushButton;                                    //各个控件对象的初始化fileBtn->setText(tr("文件标准对话框实例"));fileLineEdit=new QLineEdit;                                 //用来显示选择的文件名mainLayout=new QGridLayout(this);                           //布局设计mainLayout->addWidget(fileBtn,0,0);mainLayout->addWidget(fileLineEdit,0,1);connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile()));   //事件关联//标准颜色对话框colorBtn=new QPushButton;                                   //创建各个控件的对象colorBtn->setText(tr("颜色标准对话框实例"));colorFrame=new QFrame;colorFrame->setFrameShape(QFrame::Box);colorFrame->setAutoFillBackground(true);mainLayout->addWidget(colorBtn,1,0);                        //布局设计mainLayout->addWidget(colorFrame,1,1);connect(colorBtn,SIGNAL(clicked()),this,SLOT(showColor())); //事件关联//标准字体对话框fontBtn=new QPushButton;                                	//创建控件的对象fontBtn->setText(tr("字体标准对话框实例"));fontLineEdit=new QLineEdit;                              	//显示更改的字符串fontLineEdit->setText(tr("Welcome!"));mainLayout->addWidget(fontBtn,2,0);                         //布局设计mainLayout->addWidget(fontLineEdit,2,1);connect(fontBtn,SIGNAL(clicked()),this,SLOT(showFont()));   //事件关联//标准输入对话框inputBtn =new QPushButton;                                  //创建控件的对象inputBtn->setText(tr("标准输入对话框实例"));mainLayout->addWidget(inputBtn,3,0);                        //布局设计connect(inputBtn,SIGNAL(clicked()),this,SLOT(showInputDlg()));//事件关联//消息对话框MsgBtn =new QPushButton;                                    //创建控件对象MsgBtn->setText(tr("标准消息对话框实例"));mainLayout->addWidget(MsgBtn,3,1);connect(MsgBtn,SIGNAL(clicked()),this,SLOT(showMsgDlg()));//自定义消息框CustomBtn =new QPushButton;CustomBtn->setText(tr("用户自定义消息对话框实例"));label =new QLabel;label->setFrameStyle(QFrame::Panel|QFrame::Sunken);mainLayout->addWidget(CustomBtn,4,0);mainLayout->addWidget(label,4,1);connect(CustomBtn,SIGNAL(clicked()),this,SLOT(showCustomDlg()));
}Dialog::~Dialog()
{}
/*
QString QFileDialog::getOpenFileName
(QWidget* parent=0,                      //标准文件对话框的父窗口const QString & caption=QString ( ),	//标准文件对话框的标题名const QString & dir=QString( ),         //指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件const QString & filter=QString(),       //此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间用“::”隔开QString * selectedFilter=O,             //用户选择的过滤器通过此参数返回Options options=0                       //选择显示文件名的格式,默认是同时显示目录与文件名
)
如果选择取消(Cancel),则返回一个空串儿
*/
void Dialog::showFile()
{//获取用户选择的文件名QString s = QFileDialog::getOpenFileName(this,"open file dialog","/","*");fileLineEdit->setText(s);
}
/*
QColor getColor
(const QColor& initial=Qt::white,QWidget* parent=0                   //标准颜色对话框的父窗口
);
指定了默认选中的颜色,默认为白色。通过 QCok)r::isValid()函数可以判断用户选择的
颜色是否有效,但是当用户在选择文件时,如果选择“取消”(Cancel), 则 QColor::is函
数将返回 false
*/
void Dialog::showColor()
{//获取用户选择的颜色QColor c = QColorDialog::getColor(Qt::blue);if(c.isValid()){//设置颜色colorFrame->setPalette(QPalette(c));}
}
/*
QFont getFont
(bool* ok,QWidget* parent=0           //标准字体对话框的父窗口
);
注:若用户选择 则该参数*ok 将设为true, 函数返回用户所选择的字体;否则,将
设为false, 此时函数返回默认字体。
*/
void Dialog::showFont()
{bool ok;QFont f = QFontDialog::getFont(&ok);if (ok){//设置字体fontLineEdit->setFont(f);}
}void Dialog::showInputDlg()
{//新建InputDlg对象inputDlg =new InputDlg(this);inputDlg->show();
}void Dialog::showMsgDlg()
{//新建MsgBoxDlg对象msgDlg =new MsgBoxDlg();msgDlg->show();
}void Dialog::showCustomDlg()
{label->setText(tr("Custom Message Box"));QMessageBox customMsgBox;customMsgBox.setWindowTitle(tr("用户自定义消息框"));	//设置消息框的标题QPushButton *yesBtn=customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole);QPushButton *noBtn=customMsgBox.addButton(tr("No"),QMessageBox::ActionRole);QPushButton *cancelBtn=customMsgBox.addButton(QMessageBox::Cancel);customMsgBox.setText(tr("这是一个用户自定义消息框!"));customMsgBox.setIconPixmap(QPixmap("Qt.jpeg"));customMsgBox.exec();if(customMsgBox.clickedButton()==yesBtn)label->setText("Custom Message Box/Yes");if(customMsgBox.clickedButton()==noBtn)label->setText("Custom Message Box/No");if(customMsgBox.clickedButton()==cancelBtn)label->setText("Custom Message Box/Cancel");return;
}

InputDlg文件: 

//添加的头文件
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QDialog>
class InputDlg : public QDialog
{Q_OBJECTpublic:InputDlg(QWidget* parent=0);
private slots:void ChangeName();void ChangeSex();void ChangeAge();void ChangeScore();
private:QLabel *nameLabel1;QLabel *sexLabel1;QLabel *ageLabel1;QLabel *scoreLabel1;QLabel *nameLabel2;QLabel *sexLabel2;QLabel *ageLabel2;QLabel *scoreLabel2;QPushButton *nameBtn;QPushButton *sexBtn;QPushButton *ageBtn;QPushButton *scoreBtn;QGridLayout *mainLayout;
};
#include "inputdlg.h"
#include <QInputDialog>
InputDlg::InputDlg(QWidget *parent) :QDialog(parent)
{setWindowTitle(tr("标准输入对话框的实例"));nameLabel1 =new QLabel;nameLabel1->setText(tr("姓名:"));nameLabel2 =new QLabel;nameLabel2->setText(tr("张三"));                    	//姓名的初始值nameLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);nameBtn =new QPushButton;nameBtn->setText(tr("修改姓名"));sexLabel1 =new QLabel;sexLabel1->setText(tr("性别:"));sexLabel2 =new QLabel;sexLabel2->setText(tr("男"));                       	//性别的初始值sexLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);sexBtn =new QPushButton;sexBtn->setText(tr("修改性别"));ageLabel1 =new QLabel;ageLabel1->setText(tr("年龄:"));ageLabel2 =new QLabel;ageLabel2->setText(tr("21"));                       //年龄的初始值ageLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);ageBtn =new QPushButton;ageBtn->setText(tr("修改年龄"));scoreLabel1 =new QLabel;scoreLabel1->setText(tr("成绩:"));scoreLabel2 =new QLabel;scoreLabel2->setText(tr("80"));                 	//成绩的初始值scoreLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);scoreBtn =new QPushButton;scoreBtn->setText(tr("修改成绩"));//新建布局mainLayout =new QGridLayout(this);mainLayout->addWidget(nameLabel1,0,0);mainLayout->addWidget(nameLabel2,0,1);mainLayout->addWidget(nameBtn,0,2);mainLayout->addWidget(sexLabel1,1,0);mainLayout->addWidget(sexLabel2,1,1);mainLayout->addWidget(sexBtn,1,2);mainLayout->addWidget(ageLabel1,2,0);mainLayout->addWidget(ageLabel2,2,1);mainLayout->addWidget(ageBtn,2,2);mainLayout->addWidget(scoreLabel1,3,0);mainLayout->addWidget(scoreLabel2,3,1);mainLayout->addWidget(scoreBtn,3,2);mainLayout->setMargin(15);mainLayout->setSpacing(10);//连接信号和槽函数connect(nameBtn,SIGNAL(clicked()),this,SLOT(ChangeName()));connect(sexBtn,SIGNAL(clicked()),this,SLOT(ChangeSex()));connect(ageBtn,SIGNAL(clicked()),this,SLOT(ChangeAge()));connect(scoreBtn,SIGNAL(clicked()),this,SLOT(ChangeScore()));
}
/*
QString getText
(QWidget* parentz, 				//标准输入对话框的父窗口const QString title,            //标准输入对话框的标题名const QString label,            //标准输入对话框的标签提示QLineEdit::EchoMode mode=QLineEdit::Normal,	//指定标准输入对话框中 QLineEdit 控件的输入模式const QString& text=QString( ),	//标准字符串输入对话框弹出时QLineEdit 控件中默认出现的文字bool* ok=0, 					//指示标准输入对话框的哪个按钮被触发,若为 true, 则表示用户单击了 “OK” (确定)按钮;若为 false, 则表示用户单击了 “Cancle” (取消) 按钮Qt::WindowFlags flags=0         //指明标准输入对话框的窗体标识
);
*/
void InputDlg::ChangeName()
{bool ok;QString text=QInputDialog::getText(this,tr("标准字符串输入对话框"),tr("请输入姓名:"), QLineEdit::Normal,nameLabel2->text(),&ok);if (ok && !text.isEmpty())nameLabel2->setText(text);
}
/*
QString getltem
(QWidget* parent, //标准输入对话框的父窗口const QString& title,//标准输入对话框的标题名const QString& label,//标准输入对话框的标签提示const QStringList& items,//指定标准输入对话框中QComboBox控件显示的可选条目为一个QStringList对象int current=0,//标准条目选择对话框弹出时QComboBox控件中默认显示的条目序号bool editable=true, //指定 QComboBox 控件中显示的文字是否可编辑bool* ok=0,//指示标准输入对话框的哪个按钮被触发,若ok为true, 则表示用户单击了“OK”(确定)按钮;若ok为false, 则表示用户单击了“Cancle"(取消)按钮Qt::WindowFlags flags=0//指明标准输入对话框的窗口标识
);
*/void InputDlg::ChangeSex()
{QStringList SexItems;SexItems << tr("男") << tr("女");bool ok;QString SexItem = QInputDialog::getItem(this, tr("标准条目选择对话框"),tr("请选择性别:"), SexItems, 0, false, &ok);if (ok && !SexItem.isEmpty())sexLabel2->setText(SexItem);
}
/*
int getInt
(QWidget* parent,        //标准输入对话框的父窗口const QString& title,   //标准输入对话框的标题名const QString& label,   //标准输入对话框的标签提示int value=0,            //指定标准输入对话框中QSpinBox控件的默认显示值int min=-2147483647,    //指定 QSpinBox 控件的数值范围int max=2147483647,int step=1,             //指定 QSpinBox 控件的步进值bool* ok=0,             //用于指示标准输入对话框的哪个按钮被触发。若ok为true, 则表示用户单击了“0K”(确定) 按钮;若ok为false, 则表示用户单击了 “Cancel" (取消) 按钮Qt::WindowFlags flags=0 //指明标准输入对话框的窗口标识
);
*/
void InputDlg::ChangeAge()
{bool ok;int age = QInputDialog::getInt(this, tr("标准int类型输入对话框"),tr("请输入年龄:"), ageLabel2->text().toInt(&ok), 0, 100, 1, &ok);if (ok)ageLabel2->setText(QString(tr("%1")).arg(age));
}
/*
double getDouble
(QWidget* parent,//标准输入对话框的父窗口const QString& title,//标准输入对话框的标题名const QString& label,//标准输入对话框的标签提示double value=0,//指定标准输入对话框中 QSpinBox 控件默认的显示值double min=-2147483647,//指定 QSpinBox 控件的数值范围double max=2147483647,int decimals=1,//指定 QSpinBox 控件的步进值bool* ok=0,//用于指示标准输入对话框的哪个按钮被触发,若ok为true, 则表示用户单击了“OK”(确定)按钮;若ok为false, 则表示用户单击了“Cancel"(取消)按钮Qt::WindowFlags flags=0//指明标准输入对话框的窗口标识
);
*/
void InputDlg::ChangeScore()
{bool ok;double score = QInputDialog::getDouble(this, tr("标准double类型输入对话框"),tr("请输入成绩:"),scoreLabel2->text().toDouble(&ok), 0, 100, 1, &ok);if(ok)scoreLabel2->setText(QString(tr("%1")).arg(score));
}

MsgBoxDlg文件:

//添加的头文件
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QDialog>
class MsgBoxDlg : public QDialog
{Q_OBJECT
public:MsgBoxDlg(QWidget* parent=0);
private slots:void showQuestionMsg();void showInformationMsg();void showWarningMsg();void showCriticalMsg();void showAboutMsg();void showAboutQtMsg();
private:QLabel *label;QPushButton *questionBtn;QPushButton *informationBtn;QPushButton *warningBtn;QPushButton *criticalBtn;QPushButton *aboutBtn;QPushButton *aboutQtBtn;QGridLayout *mainLayout;
};
#include "msgboxdlg.h"
#include <QMessageBox>
MsgBoxDlg::MsgBoxDlg(QWidget *parent) :QDialog(parent)
{setWindowTitle(tr("标准消息对话框的实例"));              //设置对话框的标题//新建控件对象label =new QLabel;label->setText(tr("请选择一种消息框"));questionBtn =new QPushButton;questionBtn->setText(tr("QuestionMsg"));informationBtn =new QPushButton;informationBtn->setText(tr("InformationMsg"));warningBtn =new QPushButton;warningBtn->setText(tr("WarningMsg"));criticalBtn =new QPushButton;criticalBtn->setText(tr("CriticalMsg"));aboutBtn =new QPushButton;aboutBtn->setText(tr("AboutMsg"));aboutQtBtn =new QPushButton;aboutQtBtn->setText(tr("AboutQtMsg"));//布局mainLayout =new QGridLayout(this);mainLayout->addWidget(label,0,0,1,2);mainLayout->addWidget(questionBtn,1,0);mainLayout->addWidget(informationBtn,1,1);mainLayout->addWidget(warningBtn,2,0);mainLayout->addWidget(criticalBtn,2,1);mainLayout->addWidget(aboutBtn,3,0);mainLayout->addWidget(aboutQtBtn,3,1);//事件关联connect(questionBtn,SIGNAL(clicked()),this,SLOT(showQuestionMsg()));connect(informationBtn,SIGNAL(clicked()),this,SLOT(showInformationMsg()));connect(warningBtn,SIGNAL(clicked()),this,SLOT(showWarningMsg()));connect(criticalBtn,SIGNAL(clicked()),this,SLOT(showCriticalMsg()));connect(aboutBtn,SIGNAL(clicked()),this,SLOT(showAboutMsg()));connect(aboutQtBtn,SIGNAL(clicked()),this,SLOT(showAboutQtMsg()));
}
/*
StandardButton QMessageBox::question
(QWidget* parent,        //消息框的父窗口指针const QString& title,   //消息框的标题栏const QString& text,    //消息框的文字提示信息StandardButtons buttons=Ok,             //填写希望在消息框中出现的按钮,可根据需要在标准按钮中选择,用|连写,默认为QMessageBox::Ok。StandardButton defaultButton=NoButton   //默认按钮,即消息框出现时,焦点默认处于哪个按钮上
);
*/
void MsgBoxDlg::showQuestionMsg()
{label->setText(tr("Question Message Box"));switch(QMessageBox::question(this,tr("Question消息框"),tr("您现在已经修改完成,是否要结束程序?"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok)){case QMessageBox::Ok:label->setText("Question button/Ok");break;case QMessageBox::Cancel:label->setText("Question button/Cancel");break;default:break;}return;
}
/*
StandardButton QMessageBox::information
(QWidget*parent,         //消息框的父窗口指针const QString& title, 	//消息框的标题栏const QString& text, 	//消息框的文字提示信息StandardButtons buttons = OK,           //同 Question 消息框的注释内容StandardButton defaultButton=NoButton   //同 Question 消息框的注释内容
);
*/
void MsgBoxDlg::showInformationMsg()
{label->setText(tr("Information Message Box"));QMessageBox::information(this,tr("Information消息框"),tr("这是Information消息框测试,欢迎您!"));return;
}
/*
StandardButton QMessageBox::warning
(QWidget* parent,        //消息框的父窗口指针const QString& title,   //消息框的标题栏const QString& text,    //消息框的文字提示信息StandardButtons buttons=Ok,             //同Question 消息框的注释内容StandardButton defaultButton=NoButton   //同 Question 消息框的注释内容
);
*/
void MsgBoxDlg::showWarningMsg()
{label->setText(tr("Warning Message Box"));switch(QMessageBox::warning(this,tr("Warning消息框"),tr("您修改的内容还未保存,是否要保存对文档的修改?"),QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save)){case QMessageBox::Save:label->setText(tr("Warning button/Save"));break;case QMessageBox::Discard:label->setText(tr("Warning button/Discard"));break;case QMessageBox::Cancel:label->setText(tr("Warning button/Cancel"));break;default:break;}return;
}
/*
StandardButton QMessageBox::critical
(QWidget* parent,        //消息框的父窗口指针const QString& title,   //消息框的标题栏const QString& text,    //消息框的文字提示信息StandardButtons buttons=Ok,             //同 Question 消息框的注释内容StandardButton defaultButton=NoButton   //同 Question 消息框的注释内容
);
*/
void MsgBoxDlg::showCriticalMsg()
{label->setText(tr("Critical Message Box"));QMessageBox::critical(this,tr("Critical消息框"),tr("这是一个Critical消息框测试!"));return;
}
/*
void QMessageBox::about
(QWidget* parent,        //消息框的父窗口指针const QString& title,   //消息框的标题栏const QString& text     //消息框的文字提示信息
);
*/
void MsgBoxDlg::showAboutMsg()
{label->setText(tr("About Message Box"));QMessageBox::about(this,tr("About消息框"),tr("这是一个About消息框测试!"));return;
}
/*
void QMessageBox::aboutQt
(QWidget* parent,                //消息框的父窗口指针const QString& title=QString()  //消息框的标题栏
);
*/
void MsgBoxDlg::showAboutQtMsg()
{label->setText(tr("About Qt Message Box"));QMessageBox::aboutQt(this,tr("About Qt消息框"));return;
}

 效果展示:

三、代码解析

        标准基本对话框所需的静态函数,如下表所示。

四、总结

        使用合适的对话框,可以给用户带来很好的使用体验。当标准消息框都不能满足开发的需求时,可以自定义消息框。

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

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

相关文章

1.4补码范围,溢出,补码加减法、加法器、竞争与冒险、杂项

正数三码合一 负数的原码有1的符号位&#xff0c;反码为除了符号位以外全部取反&#xff0c;补码在反码的基础上再加1 移码的符号位中0表示负数&#xff0c;1表示正数&#xff0c;简单来说&#xff0c;原码的补码数值位不变&#xff0c;符号位取反就是移码。 对于8位寄存器: …

【docker】一文讲完docker搭建私有仓库

一、docker搭建私有仓库方法总结 搭建Docker私有仓库主要有以下几种方式&#xff1a; 使用Docker官方提供的Registry镜像&#xff1a;Docker官方提供了一个用于构建私有镜像仓库的Registry镜像&#xff0c;只需将镜像下载并运行容器&#xff0c;然后暴露5000端口即可使用。可以…

Go语言中的HTTP路由处理

在Web开发中&#xff0c;路由处理是至关重要的部分。它决定了当用户访问某个URL时&#xff0c;服务器应该如何响应。Go语言提供了多种库和工具来处理HTTP路由。下面&#xff0c;我们将深入了解如何在Go语言中处理HTTP路由。 Go语言的net/http包本身提供了基本的功能来处理路由…

大数据毕业设计:python房源数据爬虫分析预测系统+可视化 +商品房数据(源码+讲解视频)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

【Spring 篇】Spring:轻松驾驭 Java 世界的利器

在 Java 开发领域&#xff0c;Spring 框架无疑是一颗璀璨的明星&#xff0c;它不仅提供了全面的企业级特性&#xff0c;还为开发者提供了简便而强大的开发方式。本文将深入探讨 Spring 框架的简介、配置和快速入门&#xff0c;带你轻松驾驭 Java 世界的利器。 Spring 简介 Sp…

YOLOv8改进:IoU系列篇 | Shape-IoU结合基于辅助边框的Inner-IoU损失,实现再次创新

🚀🚀🚀本文改进: Shape-IoU结合基于辅助边框的Inner-IoU损失,小目标检测实现涨点,基于辅助边框的优化前提下,更加关注边界框本身的形状和尺度来计算损失 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研…

Maven(mvn)的学习下载和配置

文章目录 Maven&#xff08;mvn&#xff09;1.Maven 是什么&#xff1f;2.Maven做什么&#xff1f;2.1传统方式对项目的管理2.2Maven对jar包的管理 3.Maven怎么学3.1Maven如何创建项目3.2Maven的下载与配置3.3Maven的项目结构3.4Maven依赖的引入3.5Maven依赖的剔除3.6Maven依赖…

1050. 鸣人的影分身(dp划分)

题目&#xff1a; 1050. 鸣人的影分身 - AcWing题库 输入样例&#xff1a; 1 7 3输出样例&#xff1a; 8 思路&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; const int N20; int f[N][N]; int main() {int T,m,n;cin>>T;while(T--)…

小红书玩法策略汇总,品牌运营攻略

众所周知&#xff0c;小红书平台凭借其出色的品宣传能力和产品种草能力&#xff0c;而稳坐内容平台C位。那么不论是作为达人&#xff0c;还是品牌方&#xff0c;进驻小红书平台后该如何进行传播&#xff0c;获取流量呢?我们今天和大家分享下小红书玩法策略汇总&#xff0c;品牌…

python练习3【题解///考点列出///错题改正】

一、单选题 1.【单选题】 ——可迭代对象 下列哪个选项是可迭代对象&#xff08; D&#xff09;&#xff1f; A.(1,2,3,4,5) B.[2,3,4,5,6] C.{a:3,b:5} D.以上全部 知识点补充——【可迭代对象】 可迭代对象&#xff08;iterable&#xff09;是指可以通过迭代&#xff…

专业课130+,总分390+四川大学951信号与系统考研通信,电子信息经验分享

今年专业课130&#xff0c;总分390&#xff0c;顺利上岸&#xff0c;将近一年复习一路走来&#xff0c;感慨很多&#xff0c;希望以下经历可以给后来的同学提供一些参考。 初试备考经验 公共课&#xff1a;三门公共课&#xff0c;政治&#xff0c;英语&#xff0c;数学。在备…

Visual Studio 2022进行文件差异比较

前言 Visual Studio 2022在版本17.7.4中发布在解决方案资源管理器中比较文件的功能&#xff0c;通过使用此功能&#xff0c;可以轻松地查看两个文件之间的差异&#xff0c;包括添加、删除和修改的代码行。可以逐行查看差异&#xff0c;并根据需要手动调整和编辑文件内容以进行…

Web安全防护

一、Web安全简介 二、Web攻击来源 1、客户端&#xff1a; 2、服务器&#xff1a; 3、通道&#xff1a; 三、Web应用基本组成部分 URL工作过程 HTTP/HTTPS HTTP有两类报文 HTTP请求报头 HTTP协议请求方法 状态码 状态码组成 三、Cookie概述 Cookie和Session的关系 …

Python新年烟花代码

Pygame 绘制烟花的基本原理 1&#xff0c;发射阶段&#xff1a;在这一阶段烟花的形状是线性向上&#xff0c;通过设定一组大小不同、颜色不同的点来模拟“向上发射” 的运动运动&#xff0c;运动过程中 5个点被赋予不同大小的加速度&#xff0c;随着时间推移&#xff0c;后面的…

如何理解Nacos的CP和AP架构模型?

Nacos是阿里巴巴开源的注册中心和配置中心&#xff0c;它既可以替应用服务管理服务相关的元数据&#xff0c;也可以管理服务相关的配置信息。 Nacos既支持单机部署&#xff0c;也支持集群部署&#xff0c;为了保证数据的一致性&#xff0c;在集群模式下&#xff0c;Nacos既支持…

代码随想录刷题第三十六天| 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

代码随想录刷题第三十六天 无重叠区间 (LC 435) 题目思路&#xff1a; 代码实现&#xff1a; class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(keylambda x: (x[0],x[1]))count 0right intervals[0][1]for i in ra…

手游开发项目经验简单总结

这是我最近一个完整的手游开发项目的简单总结&#xff0c;请大家指点 引擎 语言 编辑器 项目开发模块规划分 主项目工程&#xff0c;UI资源项目工程&#xff0c;模型场景资源项目工程 热更框架 前后端协议 UI 图集 多语言适配 SLG场景和其他场景 战斗 美术模型资源 人物 动作…

mysql 添加用户并分配select权限

1.root用户先登录或者在可执行界面 1.1 选择mysql 点击mysql 或者在命令行 use mysql 1.2创建用户 CREATE USER username% IDENTIFIED BY password; 备注1&#xff1a;%替换为可访问数据库的ip&#xff0c;例如“127.0.0.1”“192.168.1.1”&#xff0c;使用“%”表示不限制…

如何通过HACS+Cpolar实现远程控制米家和HomeKit等智能家居设备

文章目录 基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssistant&#xff0c;通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店&#xff0c;将米家&#xff0c;果家设备接入 Home Assistant。 基本条件…

5G时代的电商:超高速网络如何改变购物体验?

随着5G技术的不断发展和商业化推广&#xff0c;超高速网络正深刻地改变着人们的生活方式&#xff0c;其中最显著的之一便是电子商务领域。本文将深入探讨5G时代电商的发展趋势&#xff0c;以及超高速网络如何深刻改变用户的购物体验。 5G技术的崛起 5G技术是第五代移动通信技术…