测试
测试
public static void main
感受科技之美
测试
public static void main
获取windows睡眠和亮屏时的状态
在某些业务需求下,Qt的程序需要感知到windows睡眠和亮屏时状态
以便程序做对应的处理动作。好在Qt为我们提供了QAbstractNativeEventFilter类
来捕获对应的windows事件。
一、步骤如下:
1、主界面MyMainWindow类继承QAbstractNativeEventFilter
2、重载virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result);
3、在main函数中通过installNativeEventFilter注册:
QApplication a(argc, argv);
MyMainWindow w;
w.show();
a.installNativeEventFilter(&w);
a.exec();
二、实现如下:
bool MyMainWindow::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
{
if (eventType == “windows_generic_MSG” || eventType == “windows_dispatcher_MSG”)
{
QDateTime current_date_time = QDateTime::currentDateTime();
MSG *pMsg = reinterpret_cast<MSG*>(message);
if (pMsg->message == WM_POWERBROADCAST) //屏幕唤醒
{
if (pMsg->wParam == PBT_APMSUSPEND) {
qDebug() << “shui mian”;
//处理睡眠后操作
//…
}
else if (pMsg->wParam == PBT_APMRESUMEAUTOMATIC)
{
qDebug() << “liang ping”;
//处理亮屏后操作
//…
}
QString current_date = current_date_time.toString(“yyyy-MM-dd hh:mm::ss.zzz”);
qDebug() << “current_date=” << current_date;
}
}
return false;
}
其中MSG结构体如下:
typedef struct tagMSG {
HWND hwnd; // handle to window
UINT message; // msg
WPARAM wParam; // power-management event
LPARAM lParam; // function-specific data
DWORD time;
POINT pt;
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
我们通过wParam来区分是睡眠还是亮屏。
Qt 实现读写xml
XML(Extensible Markup Language)即可扩展标记语言。
标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
用途
XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。
(摘自维基百科)
熟悉对xml的操作,在项目开发中非常重要。
qt中提供了几种类可以对xml进行处理。本次介绍的是QXmlStreamWriter和QXmlStreamReader。
一种通过流来处理xml的方式。
写入效果
核心代码
引入
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
//写
void XmlHandle::xmlWrite(const QStringList &elements)
{
QFile file(_filePath);
file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
_xmlWriter.setDevice(&file);
_xmlWriter.setAutoFormatting(true);
_xmlWriter.writeStartDocument();
_xmlWriter.writeStartElement(“root”); //root
//写数据
for (auto element: elements)
{
QStringList listParam = element.split(“,”);
if (listParam.size() == XML_Node_Num)
{
QString name = listParam[0];
QString type = listParam[1];
_xmlWriter.writeStartElement(“Info”); //Info
_xmlWriter.writeAttribute(“Name”, name);
_xmlWriter.writeAttribute(“Type”, type);
_xmlWriter.writeEndElement(); //Info
}
}
_xmlWriter.writeEndElement(); //root
_xmlWriter.writeEndDocument();
file.close();
}
//读
QVector<Info> XmlHandle::xmlRead()
{
QVector<Info> vecInfo;
QFile file(_filePath);
file.open(QIODevice::ReadOnly | QIODevice::Text);
if (file.exists())
{
_xmlReader.setDevice(&file);
while (!_xmlReader.atEnd())
{
QXmlStreamReader::TokenType type = _xmlReader.readNext();
if(type==QXmlStreamReader::StartDocument)
continue;
if (type == QXmlStreamReader::StartElement)
{
QString name = _xmlReader.name().toLatin1();
if (name == “root”)
continue;
else if (name == “Info”)
{
Info info;
QString name = _xmlReader.attributes().value(“Name”).toLatin1();
int type = _xmlReader.attributes().value(“Type”).toInt();
info.name = name;
info.type = type;
vecInfo.append(info);
}
}
}
}
file.close();
return vecInfo;
}
多态的定义及特点
定义:
多态是指一类事物有多种形态。
在不考虑实例类型的情况下使用实例,不同类型的实例有相同的调用方法。
特点:
1.增加灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
2.增加可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
例子:
class dog:
def info(self):
print(‘hello dog’)
class cat:
def info(self):
print(‘hello cat’)
class rat:
def info(self):
print(‘hello rat’)
animal = [dog, cat, rat]
for i in animal:
i().info()
运行结果:
hello dog
hello cat
hello rat
在过去的几年里,《我的世界》成为了有史以来*伟大的独立游戏之一。你可以在游戏中做很多事情——不仅是靠它自己,还包括现在可用的大量插件。它甚至可以在任何可以想象的设备上使用,包括树莓派。有这么多人玩游戏,没有比现在更好的时间来学习如何设置一个Minecraft游戏服务器。
有很多不同的方法可以让服务器启动。例如,当您运行游戏客户端时,您可以轻松地运行一个临时的、未修改的服务器。自从开发人员改变了游戏的架构,使它创建了自己的本地服务器会话,然后连接到自己来运行一个单人游戏,这就成为可能。你可以简单地使用其他客户端,通过网络或局域网连接,这取决于物理上的可能性。
只要记住所有的端口都需要打开(并且可能被转发),如果你希望人们从互联网连接。
启动一个专用的服务器
如果您想要建立一个真正的“专用”Minecraft服务器,您需要下载单独的服务器二进制文件,它可以作为Windows机器的.exe文件或所有其他平台的.jar文件。这些文件可以直接从Minecraft的网站下载到你的帐户。
Windows用户只需双击.exe文件即可启动他们的Minecraft服务器,而其他(如Linux)应该打开一个终端,将其更改为.jar文件的相同目录,并运行该命令:
java -Xms1G -Xmx1G -jar minecraft_server。jar nogui。
当然,为了整合Minecraft服务器和安装应用程序的其余部分,你应该遵循一些额外的指令将. jar文件以及创建一个特殊Minecraft服务器上的用户将只有您显式地设置的权限。通过查看Minecraft Wiki,您可以查看这些指令和相关的启动脚本。
然而,为了简单起见,这里是Ubuntu指令,因为Linux服务器通常是首选的,Ubuntu很容易设置。
搭建你自己的Minecraft服务器,以及在树莓派上搭建Minecraft服务器。
为什么要折腾这个?
为什么要自己搭Minecraft服务器呢?限制于经费,在自己的服务器上玩Minecraft,不是随便谁都可以做的。搭建在服务器上,你可以让服务器一直运行,当你不玩的时候,你的朋友和家人还可以加入到游戏中,继续建造你的世界。你可以尝试修改游戏参数,制作mod,而且还能让你体验一把GM的感觉,这在公共服务器里可是做不到的,而且也不用花很多钱去租远程主机来做服务器。对于Minecraft狂热粉丝而言,搭建Minecraft服务器已经很有吸引力了。但是在树莓派上搭则会更有吸引力。小小的树莓派耗电非常少,你可以不间断地开着服务器,一年的电费也不过几块钱而已。只要一个树莓派,一张SD卡,花上一点时间设置一下,就能有一台全天候的Minecraft服务器,月运行费用只不过一条口香糖的价格。
——张天宇
0.需要的东西
一个已经烧录好系统的树莓派,一台能够联网的PC。
1.针对Minecraft优化树莓派
将系统分区拓展至整个SD卡分区,选择高级操作选项,拓展分区,重启。
2.安装Java环境
如果你的树莓派不是官方镜像或者没有安装Java环境,请先配置。
检查方法:
java -version
1
3.配置服务器
首先,用下面的命令下载一份代码(建议mkdir新建一个文件夹放置):
sudo wget http://ci.md-5.net/job/Spigot/lastSuccessfulBuild/artifact/Spigot-Server/target/spigot.jar
// 这个链接可以一直用,因为它指向的是Spigot*新的稳定版
// 如果有任何问题,可以参考SpigotMC[http://ci.md-5.net/job/Spigot/]的下载页
1
2
3
下载完成后,输入下面的命令:
sudo java -Xms256M -Xmx900M -jar /home/pi/mc/spigot.jar nogui
// 参数说明:内存将从256M开始分配,*大900M
// 这里将代码放置在了mc文件夹中
1
2
3
接下来服务器启动,屏幕上会出现各种进度百分比。
等上大概几分钟,程序会搭建服务器,生成地图,之后的启动会快很多,大概20-30秒。在命令行用“stop”就可以优雅地关掉服务器,然后你就可以重启服务器,找出问题在哪里。
在上面的流程完成后,你就可以坐在电脑旁普通地玩Minecraft,启动程序,选择多人游戏。你会看到自己建的服务器,这是属于你自己的服务器。
祝大家玩的开心!
PS:目录下server.properties参数说明,可按需修改
// 以下是Minecraft服务器设置文件,true代表执行,false代表不执行。
Sun Mar 11 18:24:34 CST 2012 此为文件生成时间
// 是否开启地狱,不开启话地狱门将无效
allow-nether=true
// 地图文件夹名称,下界与末路之地将会自动以nether,ender加上并用下划线隔开
level-name=world
// 是否开启GameSpy4协议服务器监听器,用于获取服务器信息,国内应该用不上。
enable-query=false
// 是否允许飞行
allow-flight=false
// 远程访问服务器的密码,此项可以留空或删除
rcon.password=
// 服务器端口(25565为默认端口,联机时无需输入)
server-port=25565
// 第5行对应功能的端口
query.port=25565
// 地图类型,Default=默认,FLAT=超平坦,LARGEBIOMES=巨型生物群系
level-type=DEFAULT
// 是否开启远程访问服务器控制台。技术人员可选。
enable-rcon=false
// 地图种子,在生成地图文件夹之前填入此项,可生成特定的地图
level-seed=
// 服务器IP,不输入则为默认IP,内网用户的话请填内网IP
server-ip=
// *大建筑高度,上限是256,因为Chunk的高度*大值是256
max-build-height=256
// 是否生成NPC
spawn-npcs=true
// 是否开启白名单,没有白名单的玩家尝试进入服务器会被自动拒*
white-list=false
// 是否生成动物
spawn-animals=true
// 此处填写服务器默认材质下载链接,链接必须以.zip结尾
texture-pack=
// 用于给http://snoop.minecraft.net网站发送服务器数据,这样玩家可以从客户端上获取服务器信息,推荐关闭
snooper-enabled=false
// 是否开启*限模式,玩家死亡将自动被ban
hardcore=false
// 是否开启联网模式(正版专用,盗版必须改成false)
online-mode=false
// 是否开启PVP,不是战争服就不要开了
pvp=false
// 游戏难度,与单机相同
difficulty=1
// 玩家*次进入游戏时的游戏模式
gamemode=0
// 同时在线的*大玩家数
max-players=20
// 远程访问服务器的端口号,此项可以留空或删除
rcon.port=25575
// 是否生成怪物
spawn-monsters=true
// 是否生成建筑物(包括村庄和地牢)
generate-structures=true
// 可见距离,*大值为10
view-distance=10
// 服务器欢迎信息(显示在玩家联机页面),中文需中文补丁支持和转码,推荐EmEditor文本编辑器,自带转码功能。
motd=A Minecraft Server
官方模板:http://git.mydoc.io/?t=154712
你可以按如下命令来生成 sshkey:
查看你的 public key,并把他添加到码云(Gitee.com) SSH key添加地址:https://gitee.com/profile/sshkeys)
添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
若返回
Welcome to Gitee.com, yourname!
https://gitee.com/profile/sshkeys
在我们平时使用Linux系统时候,通常使用的Linux SSH登录方式是用户名加密码的登录方式,但是这种密码登录的方式很容易造成密码泄露或者被暴力破解,非常不安全,下面我们采用一种相对安全的登录方式—密钥登录;
我们知道SSH登录是用的RSA非对称加密的,所以我们在SSH登录的时候就可以使用RSA密钥登录,SSH有专门创建SSH密钥的工具ssh-keygen.
环境:A 机器为本地机器, B 机器为服务器机器;
实现:A ——-(免密登录)——> B
创建密钥对
首先登录 A 的用户目录(/root/)查看有没有.ssh目录,如果没有目录则创建目录;
执行命令:mkdir /root/.ssh
接下来执行创建密钥对命令,ssh密钥的创建OpenSSL的支持,如果没有安装OpenSSL需要先安装OpenSSL,命令如下
执行命令:apt install openssl
执行命令: ssh-keygen -t rsa -b 4096
出现如上图形状,表明此时密钥已经创建好了,密钥生成后会在当前目录下多出两个文件,id_rsa和id_rsa.pub,其中id_rsa是私钥,id_rsa.pub这个是公钥;
密钥创建好以后需要将公钥拷贝到 B 中的authorized_keys中,在 B 的/root/.ssh目录创建一个文件;
执行命令:touch authorized_keys
将A中创建好的公钥(id_rsa.pub)文件拷贝到B机器(/root/.ssh目录)中:
scp /root/.ssh/id_rsa.pub root@’B_ip’:/root/.ssh/ # B_ip为B机器的ip地址
cat id_rsa.pub >> authorized_keys
至此,完成预期的目标了,A可以无密钥完美登录B机器;
注意:在执行拷贝的时候是>>而不是>,请将私钥拷贝到本地保存好,这将是你登录系统的唯一凭证;
(个人理解,不管在哪里创建密钥,被登陆的服务器端,都需要创建.ssh/authorized文件需要将创建好的公钥拷贝进去即可;)
注意:
如果添加秘钥后,ssh另一台机器仍需要输入密码才能登录;
应当将文件的权限改为:.ssh文件夹的权限为700,authorized_keys文件的权限为600。
修改登录权限
下面需要修改对应的sshd_config文件,这里面有四个需要注意的地方:
PermitRootLogin yes 是否允许root账户登录,yes代表启用 ,no禁用;
RSAAuthentication yes 使用rsa密钥默认开启
PubkeyAuthentication yes 使用pubkey登录,默认开启
PasswordAuthentication no 是否启用密码登录,yes代表启用,no是禁用
默认就按照上面操作即可,需要注意的是,4暂时开启,确保可以直接用密钥对进行登录后在进行设置;
(补充:)
其他 方式 实现无需要 互动操作 登录远程服务器的方法:
1,expect
#!/bin/bash
ip=x.x.x.x
user=root
password=xxx
expect <<EOF >>test.log
set timeout 10
spawn ssh $user@$ip
expect {
“yes/no” { send “yes\n”;exp_continue } # 遇到yes/no反问句的时候,发送yes
“password” { send “$password\n” } # 当遇到输入密码的时候,将password变量值输入进去
}
expect “#” { send “cd /home/demoProject\n” } # 登录到远程机器后在远程机器上执行命令
expect “#” { send “sh xx.sh $1\n” }
expect eof
EOF
echo “success!” #
exit 0
2、sshpass
这个需要安装下,apt-get install sshpass
实现方式:sshpass -p ‘xxx’ root@‘x.x.x.x’
3、通过 | (仅供参考(#^.^#))
例如:echo ‘password’ | root@’x.x.x.x’
服务器A: 192.168.1.1
服务器B: 192.168.1.2
服务器A:
配置:
ssh-keygen -b 2048 -t rsa
#这里的-b 2048 是密钥加密的长度,*好设大点,有消息称美国有黑客解决 ssh的密钥进行破解。
#http://bbs.yuloo.com/thread-860154-1-1.html
直接回车3次
key文件会保存在/root/.ssh目录下
这时候.ssh目下会多出几个文件
id_rsa 私钥文件
id_rsa.pub 公钥文件,这个文件里的内容要放到其它主机里面去。
查看 id_rsa.pub 文件
cat /roor/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIcAvh6Lz9ghftghtfghSv+kSrxVLC9UDKq27mg5vhfghAaWcgFgllZhfg2DLnGotmeL/08bp6jMW/ekSq1BY1eiouiluiliuliul2Rr84x0bB5YShhpgJwuPbwr/pymgukyukyukyuthjkiytiliunzdfkuykyuIZgVvgPTzNdN/RDwJMsafsdvgsdsfsdfdsfsdaflozStYcWjrwzYxsroDPBy4zjd0gH5zMYhj+vS4OOAZZ8rtHEfx+sTE0= root@localhost.localdomain
服务器B:
配置:
新建文件夹与文件
mkdir /root/.ssh
vim /root/.ssh/authorized_keys
把A服务器上查看的KEY文件内容,复制到B服务器的authorized_keys中
主要是将root@localhost.localdomain修改为root@192.168.1.1 这样方便查看是哪台服务器的KEY,可能会有多台服务器的key。
修改sshd 的主配置文件,关闭密码认证登陆,使用key登陆。
vim /etc/ssh/sshd_config
找到 PasswordAuthentication yes
改成 PasswordAuthentication no
service sshd restart
测试:
在A服务器上执行
ssh root@192.168.1.2
首次登陆会需要你输入YES。看是不是不需要密码就可以登陆B服务了。
进入到root下,进入.ssh文件夹
输入:ssh-keygen
然后一路回车就好,如下图
友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速 |