QT5开发

2023-11-09

摘要:

Qt5主窗口是大部分Qt应用使用的基本界面,常见应用都会通过对主窗口进行界面布局来实现。

一、QT5主窗口构成

1、基本元素

QMainWindow是一个为用户提供主窗口程序的类。
包含一个菜单栏(menubar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一 个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础。如文本编辑器、图片编辑器等。其界面布局如下图。
在这里插入图片描述

(1)、 菜单栏

菜单是一系列命令的列表。为了实现菜单、工具栏按钮、键盘快捷键等命令的一致性,Qt使用动作(Action)来表示这

些命令。Qt的菜单就是由一系列的QAction动作对象构成的列表,而菜单栏则是包容菜单的面板,它位于主窗口顶部、

主窗口标题栏的下面。一个主窗口最多只有一个菜单栏。

(2)、状态栏

状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的最底部。用户可以在状态栏上添加、使用Qt窗口部件,

一个主窗口最多只有一个状态栏。

(3)、工具栏

工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成。工具栏位于菜单

栏的下面、状态栏的上面,可以停靠在主窗口的上、下、左、右四个方向上。一个主窗口可以包含多个锚接部件。

(4)、中心部件

中心部件处在锚接部件区的内部、主窗口的中心,一个主窗口的中心只有一个中心部件。

2、典型案例:文本编辑器

(1)、首先,介绍文件操作功能,包括新建一个文件,利用标准文件对话框QFileDialog类打开一个已存在的文件,利用

QFile和QTextStream读取文件内容,

(2)、打印文件(分文本打印和图像打印)。接着,介绍图像处理软件中的常用功能,包括图片的缩放、旋转及镜像等坐

标变换,使用QMatrix实现图像的各种坐标变换。
(3)、然后,开发文本编辑功能,通过在工具栏上设置文字字体、字号大小、加粗、斜体、下画线及字体颜色等快捷按

钮的实现,介绍了在工具栏中嵌入控件的方法。

(4)、最后是排版功能,通过选择某种排序方式实现对文本排序,以及实现文本对齐(包括左对齐、右对齐、居中对齐和

两端对齐)和撤销、重做的方法。

3、菜单与工具栏的实现

(1)、动作(Action) 的实现

以下是实现基本文件操作的动作(Action) 的代码。

void ImgProcessor::createActions()
{
    //"打开"动作
    openFileAction =new QAction(QIcon("open.png"),tr("打开"),this);
    openFileAction->setShortcut(tr("Ctrl+O"));
    openFileAction->setStatusTip(tr("打开一个文件"));
    connect(openFileAction,SIGNAL(triggered()),this,SLOT(ShowOpenFile()));

    //"新建"动作
    NewFileAction =new QAction(QIcon("new.png"),tr("新建"),this);
    NewFileAction->setShortcut(tr("Ctrl+N"));
    NewFileAction->setStatusTip(tr("新建一个文件"));
    connect(NewFileAction,SIGNAL(triggered()),this,SLOT(ShowNewFile()));

    //"退出"动作
    exitAction =new QAction(tr("退出"),this);
    exitAction->setShortcut(tr("Ctrl+Q"));
    exitAction->setStatusTip(tr("退出程序"));
    connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));

    //"复制"动作
    copyAction =new QAction(QIcon("copy.png"),tr("复制"),this);
    copyAction->setShortcut(tr("Ctrl+C"));
    copyAction->setStatusTip(tr("复制文件"));
    connect(copyAction,SIGNAL(triggered()),showWidget->text,SLOT(copy()));

    //"剪切"动作
    cutAction =new QAction(QIcon("cut.png"),tr("剪切"),this);
    cutAction->setShortcut(tr("Ctrl+X"));
    cutAction->setStatusTip(tr("剪切文件"));
    connect(cutAction,SIGNAL(triggered()),showWidget->text,SLOT(cut()));

    //"粘贴"动作
    pasteAction =new QAction(QIcon("paste.png"),tr("粘贴"),this);
    pasteAction->setShortcut(tr("Ctrl+V"));
    pasteAction->setStatusTip(tr("粘贴文件"));
    connect(pasteAction,SIGNAL(triggered()),showWidget->text,SLOT(paste()));

    //"关于"动作
    aboutAction =new QAction(tr("关于"),this);
    connect(aboutAction,SIGNAL(triggered()),this,SLOT(QApplication::aboutQt()));
    
}

以下是实现打印文本和图像、图像缩放、旋转和镜像的动作(Action) 的代码。

    //"打印文本"动作
    PrintTextAction =new QAction(QIcon("printText.png"),tr("打印文本"), this);
    PrintTextAction->setStatusTip(tr("打印一个文本"));
    connect(PrintTextAction,SIGNAL(triggered()),this,SLOT(ShowPrintText()));

    //"打印图像"动作
    PrintImageAction =new QAction(QIcon("printImage.png"),tr("打印图像"), this);
    PrintImageAction->setStatusTip(tr("打印一幅图像"));
    connect(PrintImageAction,SIGNAL(triggered()),this,SLOT(ShowPrintImage()));

    //"放大"动作
    zoomInAction =new QAction(QIcon("zoomin.png"),tr("放大"),this);
    zoomInAction->setStatusTip(tr("放大一张图片"));
    connect(zoomInAction,SIGNAL(triggered()),this,SLOT(ShowZoomIn()));

    //"缩小"动作
    zoomOutAction =new QAction(QIcon("zoomout.png"),tr("缩小"),this);
    zoomOutAction->setStatusTip(tr("缩小一张图片"));
    connect(zoomOutAction,SIGNAL(triggered()),this,SLOT(ShowZoomOut()));

    //实现图像旋转的动作(Action)
    //旋转90°
    rotate90Action =new QAction(QIcon("rotate90.png"),tr("旋转90°"),this);
    rotate90Action->setStatusTip(tr("将一幅图旋转90°"));
    connect(rotate90Action,SIGNAL(triggered()),this,SLOT(ShowRotate90()));

    //旋转180°
    rotate180Action =new QAction(QIcon("rotate180.png"),tr("旋转180°"), this);
    rotate180Action->setStatusTip(tr("将一幅图旋转180°"));
    connect(rotate180Action,SIGNAL(triggered()),this,SLOT(ShowRotate180()));

    //旋转270°
    rotate270Action =new QAction(QIcon("rotate270.png"),tr("旋转270°"), this);
    rotate270Action->setStatusTip(tr("将一幅图旋转270°"));
    connect(rotate270Action,SIGNAL(triggered()),this,SLOT(ShowRotate270()));

    //实现图像镜像的动作(Action)
    //纵向镜像
    mirrorVerticalAction =new QAction(tr ("纵向镜像"),this);
    mirrorVerticalAction->setStatusTip(tr("对一张图作纵向镜像"));
    connect(mirrorVerticalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorVertical()));

    //横向镜像
    mirrorHorizontalAction =new QAction(tr("横向镜像"),this);
    mirrorHorizontalAction->setStatusTip(tr("对一张图作横向镜像"));
    connect(mirrorHorizontalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorHorizontal()));

    //排序:左对齐、右对齐、居中和两端对齐
    actGrp =new QActionGroup(this);

	leftAction =new QAction(QIcon("left.png"),"左对齐",actGrp);
    leftAction->setCheckable(true);

    rightAction =new QAction(QIcon("right.png"),"右对齐",actGrp);
    rightAction->setCheckable(true);

    centerAction =new QAction(QIcon("center.png"),"居中",actGrp);
    centerAction->setCheckable(true);

    justifyAction =new QAction(QIcon("justify.png"),"两端对齐",actGrp);
    justifyAction->setCheckable(true);

    connect(actGrp,SIGNAL(triggered(QAction*)),this,SLOT(ShowAlignment(QAction*)));

    //实现撤销和重做的动作(Action)
    //撤销和重做
    undoAction =new QAction(QIcon("undo.png"),"撤销",this);
    connect(undoAction,SIGNAL(triggered()),showWidget->text,SLOT(undo()));
    redoAction =new QAction(QIcon("redo.png"),"重做",this);
    connect(redoAction,SIGNAL(triggered()),showWidget->text,SLOT(redo()));
(2)、菜单(Menus)的实现

在实现了各个动作之后,需要将它们通过菜单、工具栏或快捷键的方式体现出来,以下是菜单的实现函createMenus()代码。

void ImgProcessor::createMenus()
{
    //文件菜单
    fileMenu =menuBar()->addMenu(tr("文件"));
    fileMenu->addAction(openFileAction);
    fileMenu->addAction(NewFileAction);
    fileMenu->addAction(PrintTextAction);
    fileMenu->addAction(PrintImageAction);
    fileMenu->addSeparator();
    fileMenu->addAction(exitAction);

    //缩放菜单
    zoomMenu =menuBar()->addMenu(tr("编辑"));
    zoomMenu->addAction(copyAction);
    zoomMenu->addAction(cutAction);
    zoomMenu->addAction(pasteAction);
    zoomMenu->addAction(aboutAction);
    zoomMenu->addSeparator();
    zoomMenu->addAction(zoomInAction);
    zoomMenu->addAction(zoomOutAction);

    //旋转菜单
    rotateMenu =menuBar()->addMenu(tr("旋转"));
    rotateMenu->addAction(rotate90Action);
    rotateMenu->addAction(rotate180Action);
    rotateMenu->addAction(rotate270Action);

    //镜像菜单
    mirrorMenu =menuBar()->addMenu(tr("镜像"));
    mirrorMenu->addAction(mirrorVerticalAction);
    mirrorMenu->addAction(mirrorHorizontalAction);
}
(3)、工具栏(ToolBars) 的实现

接下来实现相对应的工具栏create ToolBars(),主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具

条的方式,也可根据需要进行工具条的划分。代码如下:

void ImgProcessor::createToolBars()
{
    //文件工具条
    fileTool =addToolBar("File");
    fileTool->addAction(openFileAction);
    fileTool->addAction(NewFileAction);
    fileTool->addAction(PrintTextAction);
    fileTool->addAction(PrintImageAction);

    //编辑工具条
    zoomTool =addToolBar("Edit");
    zoomTool->addAction(copyAction);
    zoomTool->addAction(cutAction);
    zoomTool->addAction(pasteAction);
    zoomTool->addSeparator();
    zoomTool->addAction(zoomInAction);
    zoomTool->addAction(zoomOutAction);

    //旋转工具条
    rotateTool =addToolBar("rotate");
    rotateTool->addAction(rotate90Action);
    rotateTool->addAction(rotate180Action);
    rotateTool->addAction(rotate270Action);

    //撤销和重做工具条
    doToolBar =addToolBar("doEdit");
    doToolBar->addAction(undoAction);
    doToolBar->addAction(redoAction);

    //字体工具条
    fontToolBar =addToolBar("Font");
    fontToolBar->addWidget(fontLabel1);
    fontToolBar->addWidget(fontComboBox);
    fontToolBar->addWidget(fontLabel2);
    fontToolBar->addWidget(sizeComboBox);
    fontToolBar->addSeparator();
    fontToolBar->addWidget(boldBtn);
    fontToolBar->addWidget(italicBtn);
    fontToolBar->addWidget(underlineBtn);
    fontToolBar->addSeparator();
    fontToolBar->addWidget(colorBtn);

    //排序工具条
    listToolBar =addToolBar("list");
    listToolBar->addWidget(listLabel);
    listToolBar->addWidget(listComboBox);
    listToolBar->addSeparator();
    listToolBar->addActions(actGrp->actions());
}

二、QT5文件操作功能

1、新建文件

(1) 打开“imgprocessor.h” 头文件,添加‘ protected slots:”

protected slots:
void ShowNewFile(); //新建文件

(2)在createActions()函 数的“"新建"动作”最后添加事件关联:

connect(NewFileAction,SIGNAL(triggered(),this,SLOT(ShowNewiFile()));

(3) 实现新建文件功能的函数ShowNewFile()如下:

void ImgProcessor::ShowNewFile()
{
	ImgProcessor *newlmgProcessor =new ImgProcessor;
	newlmgProcessor->show();
}

(4)、运行程序,单击"文件"->“新建”命令按钮,弹出新的文件编辑窗口:
在这里插入图片描述

2、打开文件

(1) 在“imgprocessor.h” 头文件中添加“protected slots:” 变量:

void ShowOpenFile);

(2)在createActions()函数的 “"打开”动作” 最后添加事件关联:

connect(openFileAction,SIGNAL (riggred),this,SLOT(ShowOpenile)));

(3)实现打开文件功能的函数ShowOpenFile()如下:

void Imgrocessor:ShowOpenFile()
{
	fileName =QFileDialoggetOpenFileName(this);
	if(fileName.isEmpty())
	{
		if(showWidget->text->document()->isEmpty0))
		{
			loadFile(ileName);
		}
		else
		{
			ImgProcessor *newlmgProcessor =new ImgProcessor;
			newlmgProcessor->show();
			newlmgProcessor->loadilfileName);
		}
	}
}

其中,loadFile()函数的实现如下,该函数利用QFile和QTextStream完成具体读取文件内容的工作:

void ImgProcessor:loadFile(QString filename)
{
	print("file name:%s\n" ,ilename.data();  //显示文件的名字
	QFile file(filename);  //
	if(file.open(QlODevice::ReadOnly|QlODevice:Text))
	{
		QTextStream textStream(&file);
		while(!textStream.atEnd())
		{
			showWidget->text->append(textStream.readLinel();
			printf("read line\n");
		}
		print("end\n");
	}
}

在此详细说明标准文件对话框QFileDialoggetOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。.

QString QFileDialog::getOpenFileName
(
	QWidget* parent=0,
	const QString & caption=QString(), 
	const QString & dir=QString()const QString & filter=QString),
	QString * selectedFilter=0,
	Options options=0
);

(4)、在该源文件的开始部分添加如下头文件:

#include <QFileDialog>
#include <QFile>
#include <QTextStream>

(5)、运行程序,单击“文件”→“打开”命令或单击工具栏.上的按钮,弹出“打开”对话框,选择某个文件,单击“打开”按

钮,文本编辑框中将显示出该文件的内容,如下图所示。
在这里插入图片描述在这里插入图片描述

三、打印文件

1、文本打印

(1)、打印文本在文本编辑工作中经常使用,下面将介绍如何实现文本打印功能。实现后的效果如下图所示。
在这里插入图片描述(2)、实现步骤

在头文件中添加“protectedslots:”变量:

void ShowPrintText();

在createActions()函数的 “打印文本"动作”最后添加事件关联:

connect(PrintTextAction,SIGNAL(triggered),this,SLOT(ShowPrintText());

实现打印文本功能的函数ShowPrintText()如下:

void ImgProcessr:ShowPrintText()
{
	QPrinter printer;
	QPrintDialog printDialog(&printer,this); //新建一个QPrintDialog 对话框
	if(printDialog.exec())  //对话框执行动作
	{
		QTextDocument *doc =showWidget->text->document();
		doc->print(&printer);
	}
}

在该源文件的开始部分添加如下头文件:

#include <QPrintDialog>
#include <QPrinter>

(3)运行程序,单击“文件”→“打印文本”命令或工具栏上的按钮,弹出标准打印对话框,如上图所示。

2、图像打印

(1) 在头文件中添加“ protected slots:” 变量:

void ShowPrintlmage();

(2)在createActions()函 数的最后添加事件关联:

connect(PrintlmageAction,SIGNAL(triggered),this,SLOT(ShowPrintlmage()));

(3)实现打印图像功能的ShowPrintlmage()函数如下:

void ImgProcessor:ShowPrintlmage()
{
	QPrinter printer;  //定义一个QPrinter类成员
	QPrintDialog printDialog(&printer,this);  //新建QPrintDialog类的printDialog打印对话框
	if(printDialog.exec()		//执行对话框内的操作
	{
		QPainter painter(&printer); 
		QRect rect =painter.viewport();
		QSize size = img.size();
		size.scale(rect.size(),Qt:KeepAspectRatio); 
		painter.setViewport(rect.c),rect.y(),size.width),size.height();
		painter.setWindow(img.rect();
		painter.drawlmage(0,0,img);
	}
}

(4)在该源文件的开始部分添加如下头文件:

#include <QPainter>

(5) 运行程序,单击“文件”→“打印图像”命令或单击工具栏上的|按钮,弹出标准打印对话框,显示效果下图所示。
在这里插入图片描述

至此,Qt5主窗体中的文件操作大部分就讲解完毕了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT5开发 的相关文章

  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 使用 C# 和反射打印完整的对象图

    我有一个复杂的对象 class A int Field1 int field2 property ClassB ClassB property classC classC etc etc 我想使用反射打印完整的对象图 有什么好的代码吗 一种
  • 通过 TCP/.NET SSLStream 发送文件很慢/无法正常工作

    我正在编写一个与 SSL 配合使用的服务器 客户端应用程序 通过SSLStream 它必须做很多事情 不仅仅是文件接收 发送 目前 它的工作原理是 只有一个连接 我总是使用从客户端 服务器发送数据SSLStream WriteLine 并使
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 如何在方法模板中使用模板类型的引用传递参数?

    我目前正在努力编译以下代码 首先是包含带有方法模板的类的头文件 ConfigurationContext h class ConfigurationContext public template
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • C++在子类中调用虚方法

    我有以下课程 class A protected A inner public virtual void doSomething 0 class B public A void doSomething if inner NULL inner
  • C# While 循环与 For 循环?

    在 C 中 一个问题已经困扰我一段时间了 它的 While 和 For 循环之间的实际主要区别是什么 它只是纯粹的可读性吗 在 for 循环中本质上可以做的所有事情都可以在 while 循环中完成 只是在不同的地方 举这些例子 int nu
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • 使用 OpenSSL 库在 C++ 中生成 SHA 哈希值

    如何使用以下命令生成 SHA1 或 SHA2 哈希值OpenSSL https openssl org图书馆 我搜索了谷歌 找不到任何函数或示例代码 从命令行来看 很简单 printf compute sha1 openssl sha1 您
  • C++中的虚方法表存放在哪里?

    我想知道类对象 不是实例 而是类 如何存储在内存中 class A public int a virtual void f virtual A class B public A public int b void f final overr
  • 为什么这段代码不会产生编译错误?

    template
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 为什么 g++ 在编译的二进制文件中存储类名?

    我注意到如果我跑strings在我编译的程序上g 输出包含它使用的各种类的名称 该程序是用 O3并且没有 g or p 并且当我剥离二进制文件时 类名仍然存在 我想知道为什么有必要g 将此信息存储在二进制文件中 出现的类名似乎都是使用虚函数
  • Sharepoint 的 CAML 查询中的日期时间比较

    我正在尝试从共享点列表中获取某些项目 具体取决于自定义列中的日期 我已经使用 U2U Caml Builder 创建了查询 这很有效 但是当我将其放入 Web 部件中自己的代码中时 它总是返回列表中的所有项目 这是我的代码 DateTime
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • C++11 中引入了哪些重大更改?

    我知道 C 11 中至少有一项更改会导致一些旧代码停止编译 引入explicit operator bool 在标准库中 替换旧实例operator void 诚然 这将破坏的代码可能是一开始就不应该有效的代码 但它仍然是一个破坏性的变化

随机推荐

  • java static 静态方法的使用 注意事项

    定义为 static function1 function1 中不能引用this或super 在android 中这样用的话 会出现以下的报错 W dalvikvm 2783 JNI WARNING instance fieldID 0x5
  • DC-6靶机渗透测试

    文章目录 DC 6靶机渗透测试 方式一 1 信息收集 1 1 主机扫描 1 2 端口扫描 1 3 目录扫描 2 暴力破解 3 漏洞利用 4 提权 方式二 1 漏洞利用 方式三 1 漏洞利用 方式四 1 漏洞利用 DC 6靶机渗透测试 方式一
  • MySQL 数据库————连接查询

    目录 一 多表连接查询 1 内连接 inner join 2 左连接 left join 3 右连接 right join 二 存储过程 1 简介 2 优点 3 语法 参数分类 带参数的存储过程 修改存储过程 删除存储过程 一 多表连接查询
  • VS2019安装和使用(C语言)

    VS2019视频 VS2022视频 博主看视频做的笔记 视频讲解比较详细更容易上手 一 下载 VS2019官网下载 分为三个版本 个人用户下载Community 2019足够了 登录微软账号免费 点击下载后跳转新页面可能要等一会才能弹出下载
  • 线性代数的深入理解

    线性代数笔记 关于矩阵理解 reference 矩阵理解 图片来源 b站上的教程 线性变换 所谓变换 其实就是空间里从一个点 元素 对象 到另一个点 元素 对象 的跃迁 矩阵是线性空间中的线性变换的一个描述 在一个线性空间中 只要我们选定一
  • 可正反插USB-C双口转HDMI/VGA带PD快充音视频产品设计方案AG9321MCQ设计参考电路

    ALGOLTEK AG9321MCQ系列为HDMI和VGA转换器提供USB C型 显示端口备用 的单片机解决方案 并提供电源传输 AG9321MCQ系列支持带片上Rp Rd的双USB C型插座 符合USB电源传输规范3 0 集成的10位AD
  • 【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)

    目录 一 链表基本概念和基本代码实现 二 链表 动态数组整合 面向接口编程 三 clear 四 add int index E element 1 找到 index 位置的节点 2 get int index 和 set int index
  • 前端入坑(四)--------react(如何从API获取数据)

    Hey Welcome to day 4 Hopefully you ve had time to follow along and do the exercises from the last few days And if I ve d
  • GIT : 记录IntelliJ IDEA 合并冲突时的一个bug(冲突解决后代码和本地仓库一样时导致merge失败)

    目录 目录 IntelliJ IDEA版本 问题描述 解决办法 IntelliJ IDEA版本 IntelliJ IDEA 2017 1 4 x64 问题描述 我们在用git开发是经常遇到冲突的情况 一般发生在协同开发时 一个文件被两个人同
  • Unity-Transform.eulerAngles

    Description The rotation as Euler angles in degrees The x y and z angles represent a rotation z degrees around the z axi
  • ReactJS之属性和状态的对比

    1 都是纯JS对象 2 都会触发render的执行 3 都有确定性 状态 state 是由组件本身进行维护和修改的 组件外部是无法进行修改的 属性 props 组件自身具有的特性 是无法被自身修改的 但是父组件是可以修改子组件的属性 子组件
  • 贝叶斯网络是神经网络吗,贝叶斯网络和神经网络

    深度信念网络与深度贝叶斯网络有什么区别 1 贝叶斯网络是 一种概率网络 它是基于概率推理的图形化网络 而贝叶斯公式则是这个概率网络的基础 贝叶斯网络是基于概率推理的数学模型 所谓概率推理就是通过一些变量的信息来获取其他的概率信息的过程 基于
  • 内网穿透NPS及NPC搭建(使用docker实现)

    客户端及服务端下载 NPS 1 启动NPS服务器容器 端口映射需要注意 docker run td rm p 10180 8080 p 10124 8024 p 10150 10179 10150 10179 name nps q01231
  • 遥感NDVI估算植被覆盖度

    遥感NDVI估算植被覆盖度 植被覆盖度是指植被 包括叶 茎 枝 在地面的垂直投影面积占统计区总面积的百分比 容易与植被覆盖度混淆的概念是植被盖度 植被盖度是指植被冠层或叶面在地面的垂直投影面积占植被区总面积的比例 两个概念主要区别就是分母不
  • php+redis实现对200w用户的即时推送服务

    欢迎加入 新群号码 99640845 怎么实现对200w用户的即时推送 这个推送可以理解为调用第三方的接口 push sms之类的东西 当时先写了一个demo 直接读取DB然后单个推送 结果 可想而知 于是设计一套基于redis php多进
  • EfficientNet的解读与Tensorflow 2.0实现

    EfficientNet论文解读 Efficient Net是Google在2019年发表的一篇论文 系统的研究了如何在给定资源的条件下 如何平衡扩展网络的深度 广度以及图像的分辨率这三者的关系 来取得最好的图像识别精度 作者提出了一种新的
  • part1:推荐一些适合练手、课程设计、毕业设计的python小项目源码,无任何下载门槛

    人生苦短 我用python 随着python这些年的流行 很多人开始使用python来实现各种功能 下面推荐一些适合用来练手 大学生课程设计作业 大学生毕业设计的python小项目 尤其适合新手 源码 说明文档 打包后的exe文件 都已经被
  • MCP2515独立控制器

    1 简介 MCP2515 是一款独立控制器局域网络 Controller Area Network CAN 协议控制器 完全支持 CAN V2 0B 技术规范 该器件能发送和接收标准和扩展数据帧以及远程帧 MCP2515 自带的两个验收屏蔽
  • GPU pytorch 1.4.0 cuda 10.1 安装

    安装版本 pytorch 1 4 0 torchvision 0 5 0 cudatoolkit 10 1 pytorch官网 第一步 安装 conda 镜像通道 conda config add channels https mirror
  • QT5开发

    摘要 Qt5主窗口是大部分Qt应用使用的基本界面 常见应用都会通过对主窗口进行界面布局来实现 一 QT5主窗口构成 1 基本元素 QMainWindow是一个为用户提供主窗口程序的类 包含一个菜单栏 menubar 多个工具栏 tool b