QT 基本对话框

包括:

1.标准文件对话框

 

 dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QTextCodec>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QFrame>
#include "inputdlg.h"
#include "msgboxdlg.h"
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);

    ~Dialog();
private:
    //标准文件对话框实例
    QPushButton *btnfile;
    QLineEdit *linefile;
    QGridLayout *mainLayout;

    //标准颜色对话框
    QPushButton *btncolor;
    QFrame *framecolor;

    //标准字体对话框
    QPushButton *btnfont;
    QLineEdit *linefont;

    //标准输入对话框
    QPushButton *btninput;
    InputDlg *Dlginput;

    //标准消息对话框
    QPushButton  *btnMsg;
    MsgBoxDlg   *Dlgmsg;


    //自定义消息对话框
    QPushButton  *btnCustom;
    QLabel   *label;

private slots:
    void  showFile();
    void  showColor();
    void  showFont();
    void  showInputDlg();
    void  showMsgDlg();
    void  showCustomDlg();

};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QString>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QDebug>
#include <QMessageBox>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(QStringLiteral("各种标准对话框的实例"));
//标准文件对话框实例
    btnfile=new QPushButton;
    btnfile->setText(QStringLiteral("文件标准对话框"));
    linefile=new QLineEdit;

//标准颜色对话框
    btncolor=new QPushButton;
    btncolor->setText(QStringLiteral("颜色标准对话框"));
    framecolor=new QFrame;
    framecolor->setFrameShape(QFrame::Box);
    framecolor->setAutoFillBackground(true);

//标准字体对话框
    btnfont=new QPushButton;
    btnfont->setText(QStringLiteral("字体标准对话框"));
    linefont=new QLineEdit;
    linefont->setText(QStringLiteral("Welcome"));

//标准输入对话框
    btninput=new QPushButton;
    btninput->setText(QStringLiteral("输入标准对话框"));

//标准消息对话框
    btnMsg=new QPushButton;
    btnMsg->setText(QStringLiteral("输入消息对话框"));

//自定义消息对话框
    btnCustom=new QPushButton;
    btnCustom->setText(QStringLiteral("用户自定义消息对话框"));
    label=new QLabel;
    label->setFrameStyle(QFrame::Panel|QFrame::Sunken);


    //布局
    mainLayout =new  QGridLayout(this);
    mainLayout->addWidget(btnfile,0,0);
    mainLayout->addWidget(linefile,0,1);

    mainLayout->addWidget(btncolor,1,0);
    mainLayout->addWidget(framecolor,1,1);

    mainLayout->addWidget(btnfont,2,0);
    mainLayout->addWidget(linefont,2,1);

    mainLayout->addWidget(btninput,3,0);
    mainLayout->addWidget(btnMsg,3,1);

    mainLayout->addWidget(btnCustom,4,0);
    mainLayout->addWidget(label,4,1);

    //添加信号与槽
    connect(btnfile,SIGNAL(clicked()),this,SLOT(showFile()));//文件
    connect(btncolor,SIGNAL(clicked()),this,SLOT(showColor()));//颜色
    connect(btnfont,SIGNAL(clicked()),this,SLOT(showFont()));//字体
    connect(btninput,SIGNAL(clicked()),this,SLOT(showInputDlg()));//输入????用qDebug调试一下,你来、
    connect(btnMsg,SIGNAL(clicked()),this,SLOT(showMsgDlg()));//消息
    connect(btnCustom,SIGNAL(clicked()),this,SLOT(showCustomDlg()));//消息

}

Dialog::~Dialog()
{
}

//标准文件对话框实例
void Dialog::showFile()
{
   QString s=QFileDialog::getOpenFileName(this,"open file dialog","/","c++ files(*.cpp)::c files(*.c)::Head files(*.h)");
   linefile->setText(s);
}



//标准颜色对话框
void Dialog::showColor()
{
    QColor c =QColorDialog::getColor(Qt::blue);
    if(c.isValid())
    {
        framecolor->setPalette(QPalette(c));
    }
}

//标准字体对话框
void Dialog::showFont()
{
    bool ok;
    QFont f=QFontDialog::getFont(&ok);
    if(ok)
    {
      linefont->setFont(f);
    }

}

//输入标准对话框
void Dialog::showInputDlg()
{
    Dlginput=new InputDlg(this);//this啥意思,你这个是弹窗,不是替换原有界面,this删掉
    Dlginput->show();//????
    qDebug()<<"hhhhhh"<<endl;//下次注意-能进去,说明你这个弹窗不对劲
}

void Dialog::showMsgDlg()
{
    Dlgmsg=new MsgBoxDlg();
    Dlgmsg->show();


}

//用户自定义消息框
void Dialog::showCustomDlg()
{
    label->setText(QStringLiteral("Custom Message Box"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(QStringLiteral("用户自定义消息框"));

    QPushButton *yesBtn=customMsgBox.addButton(QStringLiteral("Yes"),QMessageBox::ActionRole);
    QPushButton *noBtn=customMsgBox.addButton(QStringLiteral("No"),QMessageBox::ActionRole);
    QPushButton *cancelBtn=customMsgBox.addButton(QMessageBox::Cancel);

    customMsgBox.setText(QStringLiteral("这是一个用户自定义消息框"));
    customMsgBox.setIconPixmap(QPixmap("Qt.png"));
    customMsgBox.exec();

    if(customMsgBox.clickedButton()==yesBtn)
       label->setText(QStringLiteral("Custom Message Box/Yes"));
    if(customMsgBox.clickedButton()==noBtn)
       label->setText(QStringLiteral("Custom Message Box/No"));
    if(customMsgBox.clickedButton()==cancelBtn)
       label->setText(QStringLiteral("Custom Message Box/Cancel"));

    return;
}

2.标准颜色对话框

 3.标准字体对话框

 4.标准输入对话框

4.1标准字符串输入对话框

 

4.2标准条目选择对话框

4.3标准int类型输入对话框

4.4标准double类型输入对话框

 inputdlg.h

#ifndef INPUTDLG_H
#define INPUTDLG_H

#include <QObject>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QDialog>
#include <QWidget>

class InputDlg : public QDialog
{
    Q_OBJECT
public:
    explicit InputDlg(QWidget *parent = nullptr);

signals:

private slots:
    void  ChangeName();
    void  ChangeSex();
    void  ChangeAge();
    void  ChangeScore();

private:
    QLabel *labname1;
    QLabel *labsex1;
    QLabel *labage1;
    QLabel *labscore1;
    QLabel *labname2;
    QLabel *labsex2;
    QLabel *labage2;
    QLabel *labscore2;

    QPushButton  *btnname;
    QPushButton  *btnsex;
    QPushButton  *btnage;
    QPushButton  *btnscore;
    QGridLayout  *mainLayout;
};

#endif // INPUTDLG_H

 inputdlg.cpp

#include "inputdlg.h"
#include <QString>
#include <QWidget>
#include <QGridLayout>
#include <QInputDialog>
InputDlg::InputDlg(QWidget *parent) : QDialog(parent)
{
   setWindowTitle(QStringLiteral("各种标准对话框的实例"));
   labname1=new QLabel;
   labname1->setText(QStringLiteral("姓名"));
   labname2=new QLabel;
   labname2->setText(QStringLiteral("张三"));
   labname2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
   btnname=new QPushButton;
   btnname->setText(QStringLiteral("修改姓名"));

    labsex1=new QLabel;
    labsex1->setText(QStringLiteral("性别"));
    labsex2=new QLabel;
    labsex2->setText(QStringLiteral("男"));
    labsex2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    btnsex=new QPushButton;
    btnsex->setText(QStringLiteral("修改性别"));

    labage1=new QLabel;
    labage1->setText(QStringLiteral("年龄"));
    labage2=new QLabel;
    labage2->setText(QStringLiteral("21"));
    labage2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    btnage=new QPushButton;
    btnage->setText(QStringLiteral("修改年龄"));

    labscore1=new QLabel;
    labscore1->setText(QStringLiteral("成绩"));
    labscore2=new QLabel;
    labscore2->setText(QStringLiteral("98"));
    labscore2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    btnscore=new QPushButton;
    btnscore->setText(QStringLiteral("修改成绩"));


    //布局“QGridLayout::QGridLayout(const QGridLayout &)”: 无法将参数 1 从“InputDlg *”转换为“QWidget *” ---说明QObject不能实现
    mainLayout =new  QGridLayout(this);
    mainLayout->addWidget(labname1,0,0);
    mainLayout->addWidget(labname2,0,1);
    mainLayout->addWidget(btnname,0,2);

    mainLayout->addWidget(labsex1,1,0);
    mainLayout->addWidget(labsex2,1,1);
    mainLayout->addWidget(btnsex,1,2);

    mainLayout->addWidget(labage1,2,0);
    mainLayout->addWidget(labage2,2,1);
    mainLayout->addWidget(btnage,2,2);

    mainLayout->addWidget(labscore1,3,0);
    mainLayout->addWidget(labscore2,3,1);
    mainLayout->addWidget(btnscore,3,2);
    mainLayout->setMargin(15);
    mainLayout->setSpacing(10);

//信号与槽的连接
    connect(btnname,SIGNAL(clicked()),this,SLOT(ChangeName()));
    connect(btnsex,SIGNAL(clicked()),this,SLOT(ChangeSex()));
    connect(btnage,SIGNAL(clicked()),this,SLOT(ChangeAge()));
    connect(btnscore,SIGNAL(clicked()),this,SLOT(ChangeScore()));

}

void InputDlg::ChangeName()
{
    bool ok;
    QString  text=QInputDialog::getText(this,QStringLiteral("标准字符串"),QStringLiteral("请输入姓名:"),QLineEdit::Normal,labname2->text(),&ok);
    if(ok&&!text.isEmpty())
    {
       labname2->setText(text);
    }
}

void InputDlg::ChangeSex()
{
    QStringList SexItems;
    SexItems<<QStringLiteral("男")<<QStringLiteral("女");
    bool ok;
    QString SexItem=QInputDialog::getItem(this,QStringLiteral("标准条目选择对话框"),QStringLiteral("请选择性别:"),SexItems,0,false,&ok);
    if(ok&&!SexItem.isEmpty())
    {
       labsex2->setText(SexItem);
    }

}

void InputDlg::ChangeAge()
{
   bool ok;
   int age=QInputDialog::getInt(this,QStringLiteral("标准int类型输入话框"),QStringLiteral("请选择年龄:"),labage2->text().toInt(&ok),0,100,1,&ok);
   if(ok)
   {
      labsex2->setText(QString(QStringLiteral("%1")).arg(age));
   }

}

void InputDlg::ChangeScore()
{
    bool ok;
    double score=QInputDialog::getDouble(this,QStringLiteral("标准double类型输入话框"),QStringLiteral("请输入成绩:"),labscore2->text().toDouble(&ok),0,100,1,&ok);
    if(ok)
    {
       labscore2->setText(QString(QStringLiteral("%1")).arg(score));
    }
}

5.消息对话框

5.1Question 消息框

5.2Information 消息框

 

5.3Warning 消息框

5.4Critical 消息框

5.5About 消息框

5.6About  Qt 消息框

 msgboxdlg.h

#ifndef MSGBOXDLG_H
#define MSGBOXDLG_H
#include <QWidget>
#include <QTextCodec>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
class MsgBoxDlg : public QWidget
{
    Q_OBJECT
public:
    explicit MsgBoxDlg(QWidget *parent = nullptr);

signals:
private:
     QLabel *label;
     QPushButton  *btnquestion;
     QPushButton  *btninformation;
     QPushButton  *btnwarning;
     QPushButton  *btncritical;
     QPushButton  *btnabout;
     QPushButton  *btnQtabout;
     QGridLayout  *mainLayout;

private slots:
    void  showQuestionMsg();
    void  showInformationMsg();
    void  showWarningMSg();
    void  showCriticalMsg();
    void  showAboutMsg();
    void  showAboutQtMsg();

};

#endif // MSGBOXDLG_H

 msgboxdlg.cpp

#include "msgboxdlg.h"
#include <QMessageBox>
MsgBoxDlg::MsgBoxDlg(QWidget *parent) : QWidget(parent)
{

    setWindowTitle(QStringLiteral("标准消息对话框实例"));
    label=new QLabel;
    label->setText(QStringLiteral("请选择一种消息框"));

    btnquestion=new QPushButton;
    btnquestion->setText(QStringLiteral("QuestionMSg"));

    btninformation=new QPushButton;
    btninformation->setText(QStringLiteral("InformationMSg"));

    btnwarning=new QPushButton;
    btnwarning->setText(QStringLiteral("WarningMSg"));

    btncritical=new QPushButton;
    btncritical->setText(QStringLiteral("CriticalMSg"));

    btnabout=new QPushButton;
    btnabout->setText(QStringLiteral("AboutMSg"));

    btnQtabout=new QPushButton;
    btnQtabout->setText(QStringLiteral("AboutQtMSg"));


    //布局

    mainLayout =new  QGridLayout(this);
    mainLayout->addWidget(label,0,0,1,2);
    mainLayout->addWidget(btnquestion,1,0);

    mainLayout->addWidget(btninformation,1,1);
    mainLayout->addWidget(btnwarning,2,0);

    mainLayout->addWidget(btncritical,2,1);
    mainLayout->addWidget(btnabout,3,0);

    mainLayout->addWidget(btnQtabout,3,1);

//信号与槽
    connect(btnquestion,&QPushButton::clicked,[this](){showQuestionMsg();});
    connect(btninformation,&QPushButton::clicked,[this](){showInformationMsg();});
    connect(btnwarning,&QPushButton::clicked,[this](){showWarningMSg();});
    connect(btncritical,&QPushButton::clicked,[this](){showCriticalMsg();});
    connect(btnabout,&QPushButton::clicked,[this](){showAboutMsg();});
    connect(btnQtabout,&QPushButton::clicked,[this](){showAboutQtMsg();});

}

void MsgBoxDlg::showQuestionMsg()
{
    label->setText(QStringLiteral("QUestion Message Box"));
    switch(QMessageBox::question(this,QStringLiteral("Question消息框"),QStringLiteral("您现在已经修改完成,是否要结束程序"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
    {
    case QMessageBox::Ok:
        label->setText(QStringLiteral("Question button/ok"));
        break;
    case QMessageBox::Cancel:
        label->setText(QStringLiteral("Question button/Cancel"));
        break;
    default:
        break;
    }
   return;

}

void MsgBoxDlg::showInformationMsg()
{
    label->setText(QStringLiteral("Information Message Box"));
    QMessageBox::information(this,QStringLiteral("Information消息框"),QStringLiteral("这是Information消息对话框,欢迎您!"));
        return;
}

void MsgBoxDlg::showWarningMSg()
{
    label->setText(QStringLiteral("Warning Message Box"));
    switch(QMessageBox::warning(this,QStringLiteral("Warning消息框"),QStringLiteral("您修改的内容还没有保存,是否保存对文档的修改?"),QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save))
    {
    case QMessageBox::Save:
        label->setText(QStringLiteral("Warning button/Save"));
        break;
    case QMessageBox::Cancel:
        label->setText(QStringLiteral("Warning button/Cancel"));
        break;
    case QMessageBox::Discard:
        label->setText(QStringLiteral("Warning button/Discard"));
        break;

    default:
        break;
    }
   return;
}

void MsgBoxDlg::showCriticalMsg()
{
    label->setText(QStringLiteral("Critical Message Box"));
    QMessageBox::critical(this,QStringLiteral("Critical消息框"),QStringLiteral("这是Critical消息对话框测试!"));
        return;
}

void MsgBoxDlg::showAboutMsg()
{
    label->setText(QStringLiteral("About Message Box"));
    QMessageBox::about(this,QStringLiteral("About消息框"),QStringLiteral("这是About消息对话框测试!"));
        return;
}

void MsgBoxDlg::showAboutQtMsg()
{
    label->setText(QStringLiteral("About Qt Message Box"));
    QMessageBox::aboutQt(this,QStringLiteral("About Qt消息框"));
        return;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

漏洞指北-VulFocus靶场专栏-初级01

漏洞指北-VulFocus靶场专栏-初级 初级001 &#x1f338;海洋CMS代码执行&#xff08;CNVD-2020-22721&#x1f338;step1&#xff1a;进入后台页面 账号密码&#xff1a;admin amdinstep2&#xff1a;点击系统&#xff0c;点击后台IP安全设置,关闭step3 启动burpsuite&#xff…

SQL助你面大厂(窗口函数)

在面试过程中窗口函数的应用可谓是数不胜数&#xff0c;前提你要知道什么是窗口函数&#xff0c;最常用的窗口函数有哪些&#xff1f;语法是什么&#xff1f;分别用的场景是什么&#xff1f;今天会以这三个问题开始我们今天的学习 什么是窗口函数&#xff1f; 所谓的窗口函数就…

SQLite数据库实现数据增删改查

当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储&#xff0c;并且支持数据的增删改查操作。其中&#xff0c;宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。 实现功能&#xff1a; 创建 SQLite 数据库表&#xff0c;用于存储宠…

【OFDM系列】DFT为什么能求频率幅度谱?DFT后的X[k]与x(n)幅度的关系?DFT/IDFT底层数学原理?

文章目录 问题引入铺垫一些小公式DFT公式证明DFT公式分解为4部分先考虑k10的情况:再考虑k1≠0的情况: DFT计算后&#xff0c;X(k)与x(n)的关系&#xff1a; Matlab FFT示例代码IDFT公式证明Matlab调用FFT/IFFT并绘图 问题引入 上面是DFT和IDFT的公式&#xff0c;IDFT先不谈。在…

构建 NodeJS 影院微服务并使用 docker 部署它(02/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 图片取自网络 — 封面由我制作 这是✌️“构建 NodeJS 影院微服务”系列的第二篇文章。 二、对第一部分的…

netty(一):NIO——处理消息边界

处理消息边界 为什么要处理边界 因为会存在半包和粘包的问题 1.客户端和服务端约定一个固定长度 优点&#xff1a;简单 缺点&#xff1a;可能造成浪费 2.客户端与服务端约定一个固定分割符 *缺点 效率低 3.先发送长度&#xff0c;再发送数据 TLV格式&#xff1a; type…

Git分布式版本控制系统

目录 2、安装git 2.1 初始环境 2.2 Yum安装Git 2.3 编译安装 2.4 初次运行 Git 前的配置 2.5 初始化及获取 Git 仓库 2.6 Git命令常规操作 2.6.2 添加新文件 2.6.3 删除git内的文件 2.6.4 重命名暂存区数据 2.6.5 查看历史记录 2.6.6 还原历史数据 2.6.7 还原未来…

星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来

目录 前言 一、监听按键并作出判断 二、持续移动 三、左右移动 总结&#xff1a; 前言 今天开始正式操控我们的小蜜蜂了&#xff0c;之前学java的时候是有一个函数监听鼠标和键盘的操作&#xff0c;我们通过传过来不同的值进行判断&#xff0c;现在来看看python是否一样的实现…

lvs-DR

lvs-DR数据包流向分析 client向目标VIP发出请求。 DIR根据负载均衡算法一台active的RS&#xff08;RIR1&#xff09;&#xff0c;将RIP1所在的网卡的mac地址作为目标的mac地址&#xff0c;发送到局域网里。 RIRI在局域网中的收到这个帧&#xff0c;拆开后发现目标&#xff08…

【ARM】Day4 点亮LED灯

1. 思维导图 2. 自己编写代码实现三盏灯点亮 .text .global _start _start: /**********LED1&#xff0c;LED2,LED3点灯:PE10,PF10,PE8**************/ RCC_INIT:使能GPIOE组/GPIOF组控制器,通过RXCC_MP_AHB4ENSETR设置第[5:4]位写1,地址:0x50000A28[5:4]1ldr r0,0x50000A28 …

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析 一、阶段1 固件开机自检 (SM BIST)&#xff1a;APPS PBL加载XBL后触发 INT_RESET进行Warm Reset二、阶段2 固件开机自检 (SM BIST)&#xff1a;加载TZ&#xff0c;初始Hypervisor&#xff0c;启动QNX Kernel&#x…

22年电赛B题——具有自动泊车功能的电动车——做题记录以及经验分享

前言 这道题目也是小车类电赛题目&#xff0c;十月份的电赛题&#xff0c;由于之前积累了一些经验&#xff0c;这道题目在做下来的感觉还行,但是我们看题目没有仔细审题&#xff0c;和题目要求有一些些偏差&#xff0c;但是基础大功能还是做出来辽&#xff0c;大家还是可以参考…

LeetCode283.移动零

这道题还是很简单的&#xff0c;我用的是双指针&#xff0c;左指针i从头开始遍历数组&#xff0c;右指针j是从i后面第一个数开始遍历&#xff0c;当左指针i等于0的时候&#xff0c;右指针j去寻找i右边第一个为0的数和i交换位置&#xff0c;交换完了就break内层循环&#xff0c;…

Linux网络编程:网络基础

文章目录&#xff1a; 一&#xff1a;协议 二&#xff1a;网络应用设计模式_BS模式和CS模式 三&#xff1a;网络分层模型&#xff08;OSI七层 TCP/IP四层&#xff09; 四&#xff1a;通信过程 五&#xff1a;协议格式 1.数据包封装 2.以太网帧格式和ARP数据报格式 …

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析 一、XBL Loader 汇编源码分析1.1 解析 boot\QcomPkg\XBLLoader\XBLLoader.inf1.2 boot\QcomPkg\XBLDevPrg\ModuleEntryPoint.S&#xff1a;跳转 sbl1_entry 函数1.3 XBLLoaderLib\sbl1_Aarch64.s…

Communication Channels

沟通渠道 n * (n - 1) / 2 你1 相关方3 4 4 * 3 / 2 6 你1 相关方3 相关方1 5 5 * 4 / 2 10 人越多&#xff0c;沟通渠道越多&#xff0c;沟通成本理论越高

Roxy-Wi 命令执行漏洞复现

漏洞描述 Roxy-WI是开源的一款用于管理 Haproxy、Nginx 和 Keepalived 服务器的 Web 界面 Roxy-WI 6.1.1.0 之前的版本存在安全漏洞,该漏洞源于系统命令可以通过 subprocess_execute 函数远程运行,远程攻击者利用该漏洞可以执行远程代码。 免责声明 技术文章仅供参考,任…

jstack(Stack Trace for Java)Java堆栈跟踪工具

jstack&#xff08;Stack Trace for Java&#xff09;Java堆栈跟踪工具 jstack&#xff08;Stack Trace for Java&#xff09;命令用于生成虚拟机当前时刻的线程快照&#xff08;一般称为threaddump或者javacore文件&#xff09;。 线程快照就是当前虚拟机内每一条线程正在执…

使用预制体画刷在游戏场景中快速布置预制体、粒子特效等

有时候在使用tilemap的时候&#xff0c;会希望在场景中添加更复杂的对象。 在2d-extras中&#xff0c;加入了预制件笔刷&#xff08;Prefab Brush&#xff09;&#xff0c;可以将游戏物体预制体作为瓦片&#xff0c;来方便的在游戏场景中快速的绘制。可以自动适应游戏物体的位置…

GitHub 开启 2FA 双重身份验证的方法

最近收到GitHub官方发来的邮件&#xff0c;全是英文的&#xff0c;如图&#xff1a; 使用邮箱翻译插件&#xff0c;进行翻译&#xff0c;哦&#xff0c;原来是要我进行2FA注册&#xff0c;如果不注册&#xff0c;GitHub的访问将收到限制&#xff0c;所以还是得注册一下 然后怎…