当前位置: 首页 > news >正文

在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql

一、CMake安装

Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/135960115?spm=1001.2014.3001.5501二、安装boost

boost官网:boost官网

我下载的boost版本:

  • windows:boost_1_84_0.zip
  • linux:boost_1_84_0.tar.gz 

2.1 在windows中安装boost和测试

 (1)在windows中,解压这个压缩包boost_1_84_0.zip路径为:D:\boost_1_84_0

  • 在这个路径下有一个文件的文件名是bootstrap.bat:

 运行cmd,切换到D:\boost_1_84_0这个路径,然后D:\boost_1_84_0>bootstrap.bat

(2)接着执行

.\b2

(3)生成b2.exe文件,默认执行b2.exe

D:\boost_1_84_0>b2.exe

(4)打开visual stdio 2022,在创建好的C++项目中,点击项目>属性>VC++目录这里添加路径到包含目录和库目录

  • 包含目录
D:\boost_1_84_0
  • 库目录 
D:\boost_1_84_0\stage\lib

  • main.cpp
#include <iostream>
#include <boost/bind.hpp>
#include <string>
using namespace std;class Person {
public:void say(string name) {cout << name << "说: 三弟你真可爱!" << endl;}
};int main() {Person h;auto func = boost::bind(&Person::say, &h, "关羽");func();return 0;
}

至此,成功验证!!!

2.2 在Linux中安装boost和测试

heheda@linux:~$ cd ~
heheda@linux:~$ pwd
/home/heheda
heheda@linux:~$ mkdir package
heheda@linux:~$ ls
examples.desktop  Linux  llvm.sh  package  projects  vim配置  公共的  模板  视频  图片  文档  下载  音乐  桌面

boost_1_69_0.tar.gz 用 FinalShell等上传文件工具,上传到/home/heheda/package这个目录下

heheda@linux:~$ cd package/
heheda@linux:~/package$ ls
boost_1_84_0.tar.gz 
heheda@linux:~/package$ tar -zxvf boost_1_69_0.tar.gz 
heheda@linux:~/package$ ls
boost_1_84_0  boost_1_84_0.tar.gz
heheda@linux:~/package$ cd boost_1_84_0
heheda@linux:~/package/boost_1_84_0$ ./bootstrap.sh
heheda@linux:~/package/boost_1_84_0$ ./b2
heheda@linux:~/package/boost_1_84_0$ ./b2 install

打开visual stdio 2022,选择Linux,选择控制台应用程序

  • 工具>选项>跨平台>连接管理器

打开visual stdio 2022,在创建好的C++项目中,点击项目>属性>VC++目录这里添加路径到包含目录和库目录

  •  包含目录
/home/heheda/package/boost_1_84_0
  • 库目录 
/home/heheda/package/boost_1_84_0/stage/lib

参考和推荐文章:

C++网络编程 - Boost::asio异步网络编程 - 01- boost库源码编译安装_the boost c++ libraries were successfully built!-CSDN博客https://blog.csdn.net/QIANGWEIYUAN/article/details/88792874

三、muduo库

heheda@linux:~/package$ ls
muduo-master.zip
heheda@linux:~/package$ unzip muduo-master.zip 
heheda@linux:~/package/muduo-master$ ls
BUILD.bazel  build.sh  ChangeLog  ChangeLog2  CMakeLists.txt  contrib  examples  License  muduo  patches  README  WORKSPACE
heheda@linux:~/package/muduo-master$ vim CMakeLists.txt 

 按下i键,注释掉这一行。按ESC键,然后:wq实现保存退出

  • 注意:muduo是用cmake来构建的,所以要先安装cmake 

Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/135960115?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135960115%22%2C%22source%22%3A%22weixin_41987016%22%7D

./build.sh 

heheda@linux:~/package/muduo-master$ ls
BUILD.bazel  ChangeLog2      examples  patches
build.sh     CMakeLists.txt  License   README
ChangeLog    contrib         muduo     WORKSPACE
heheda@linux:~/package/muduo-master$ ./build.sh 
...
[ 93%] Building CXX object muduo/net/inspect/CMakeFiles/muduo_inspect.dir/PerformanceInspector.cc.o
[ 95%] Building CXX object muduo/net/inspect/CMakeFiles/muduo_inspect.dir/ProcessInspector.cc.o
[ 97%] Building CXX object muduo/net/inspect/CMakeFiles/muduo_inspect.dir/SystemInspector.cc.o
[100%] Linking CXX static library ../../../lib/libmuduo_inspect.a
[100%] Built target muduo_inspect

 ./build.sh install

heheda@linux:~/package/muduo-master$ ls
BUILD.bazel  CMakeLists.txt         License  WORKSPACE
build.sh     compile_commands.json  muduo
ChangeLog    contrib                patches
ChangeLog2   examples               README
heheda@linux:~/package/muduo-master$ ./build.sh install
heheda@linux:~/package/muduo-master$ cd ..
heheda@linux:~/package$ ls
muduo-master                build                
muduo-master.zip
heheda@linux:~/package$ cd build
heheda@linux:~/package/build$ ls
release-cpp11  release-install-cpp11
heheda@linux:~/package/build$ cd release-install-cpp11/
heheda@linux:~/package/build/release-install-cpp11$ ls
include  lib
heheda@linux:~/package/build/release-install-cpp11$ 
  •  为了让g++会自动从/usr/include和/usr/local/lib路径下寻找所需要的文件
heheda@linux:~/package/build/release-install-cpp11$ cd include/
heheda@linux:~/package/build/release-install-cpp11/include$ ls
muduo
heheda@linux:~/package/build/release-install-cpp11/include$ sudo mv muduo/ /usr/include/
[sudo] heheda 的密码: 
heheda@linux:~/package/build/release-install-cpp11/include$ cd ..
heheda@linux:~/package/build/release-install-cpp11$ ls
include  lib
heheda@linux:~/package/build/release-install-cpp11$ cd lib/heheda@linux:~/package/build/release-install-cpp11/lib$ ls
libmuduo_base.a  libmuduo_inspect.a
libmuduo_http.a  libmuduo_net.a
heheda@linux:~/package/build/release-install-cpp11/lib$ sudo mv * /usr/local/lib/
heheda@linux:~/package/build/release-install-cpp11/lib$ 

测试代码:参考和推荐这篇文章:

C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客https://blog.csdn.net/QIANGWEIYUAN/article/details/89023980测试结果:

heheda@linux:~/Linux/Server$ g++ main.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11
In file included from main.cpp:3:0:
/usr/local/include/boost/bind.hpp:41:1: note: #pragma message: The practice of declaring the Bind placeholders (_1, _2, ...) in the global namespace is deprecated. Please use <boost/bind/bind.hpp> + using namespace boost::placeholders, or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior.)^
heheda@linux:~/Linux/Server$ ./a.out
20240131 14:55:09.155231Z 47676 INFO  pid = 47676 - main.cpp:61
20240131 14:56:17.169399Z 47676 INFO  TcpServer::newConnection [EchoServer] - new connection [EchoServer-0.0.0.0:8888#1] from 127.0.0.1:39424 - TcpServer.cc:80
20240131 14:56:17.169444Z 47676 INFO  EchoServer - 127.0.0.1:39424 -> 127.0.0.1:8888 is UP - main.cpp:43
20240131 14:56:17.169460Z 47676 INFO  EchoServer-0.0.0.0:8888#1 echo 12 bytes, data received at 1706712977.169453 - main.cpp:54
heheda@linux:~$ echo "hello world" | nc localhost 8888
hello world

另外,我们也可以在visual stdio 2022来测试muduo是否安装成功。点击项目>属性>链接器>输入>库依赖项

muduo_net
muduo_base
pthread

至此,muduo安装成功,开始正常进行C++网络程序开发♪(^∇^*)啦!!!

四、安装mysql

sudo apt-get install mysql-server =>安装最新版MYSQL服务器
sudo apt-get install libmysqlclient-dev => 安装开发包

ubuntu默认安装最新的mysql,但是初始的用户名和密码是自动生成的,按下面步骤修改mysql的root和用户密码为123456

sudo cat /etc/mysql/debian.cnf

命令解释:-u后面是上面查看的用户名 -p后面紧跟上面查看的密码

sudo mysql -u debian-sys-maint -pXGxB5JwQHPIJuwPw

mysql> update mysql.user set authentication_string=password('123456') where user='root' and host='localhost';
mysql> update mysql.user set plugin='mysql_native_password';
mysql> flush privileges;
mysql> quit;

 

  • 重新启动 mysql
heheda@linux:~$ sudo service mysql restart

 输入设置好的密码:123456

设置编码:vim  /etc/mysql/mysql.conf.d/mysqld.cnf

在最后添加一句:

character-set-server=utf8

查看字符编码 

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)mysql> 
heheda@linux:~$ sudo netstat -tnap
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      738/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1073/sshd           
tcp        0      0 127.0.0.1:42039         0.0.0.0:*               LISTEN      2802/node           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      917/cupsd           
tcp        0      0 0.0.0.0:5112            0.0.0.0:*               LISTEN      2933/next-server    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      23431/mysqld        
tcp        0      0 127.0.0.1:34893         0.0.0.0:*               LISTEN      3060/code-0ee08df0c 
tcp        0      0 127.0.0.1:42039         127.0.0.1:56346         ESTABLISHED 2933/next-server    
tcp        0      0 127.0.0.1:56338         127.0.0.1:42039         ESTABLISHED 2745/sshd: heheda@n 
tcp        0      0 127.0.0.1:56346         127.0.0.1:42039         ESTABLISHED 2745/sshd: heheda@n 
tcp        0      0 127.0.0.1:42952         127.0.0.1:34893         ESTABLISHED 3039/sshd: heheda@n 
tcp        0      0 192.168.111.128:22      192.168.111.1:11667     ESTABLISHED 5196/sshd: heheda [ 
tcp        0      0 127.0.0.1:42039         127.0.0.1:56338         ESTABLISHED 2802/node           
tcp        0      0 192.168.111.128:22      192.168.111.1:2303      ESTABLISHED 2964/sshd: heheda [ 
tcp        0     52 192.168.111.128:22      192.168.111.1:11666     ESTABLISHED 5121/sshd: heheda [ 
tcp        0      0 127.0.0.1:34893         127.0.0.1:42952         ESTABLISHED 3060/code-0ee08df0c 
tcp        0      0 192.168.111.128:22      192.168.111.1:2282      ESTABLISHED 2652/sshd: heheda [ 
tcp6       0      0 :::22                   :::*                    LISTEN      1073/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      917/cupsd           
tcp6       0      0 :::5113                 :::*                    LISTEN      2933/next-server    
heheda@linux:~$ 

 另外在ubuntu中,安装mysql文章推荐:

ubuntu 安装 MySql_ubuntu 安装mysql-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_56051805/article/details/127039085


debian启动mysql_mysql 安装使用笔记-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_39610759/article/details/112179823

修改表的字符编码:alter table user default character set utf8;
修改属性的字符编码:alter table user modify column name varchar(50) character set utf8;

 

相关文章:

在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql

一、CMake安装 Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135960115?spm1001.2014.3001.5501二、安装boost boost官网&#xff1a;boost官网 我下载的boost版本&#xff1a; windows:boost_1_84_0.zipli…...

WPOpenSocial实现WordPress的QQ登录

个人建站不可避免的需要自己搭建用户数据库的问题&#xff0c;可用户却往往因为注册繁琐而放弃浏览您的网站&#xff0c;由此可见&#xff0c;一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件&#xff0c;可以提升用户互动&#xff0c;增加社交分享&#xff0…...

关于我用AI编写了一个聊天机器人……(7)

此次更新为v1.3.4版本&#xff0c;更新内容&#xff1a;增加显示时间功能 代码如下&#xff1a; #include <bits/stdc.h> #include <ctime> using namespace std; string userInput; class VirtualRobot { public:void chat() {cout << "你好&#x…...

WebService的services.xml问题

WebService有多种实现方式&#xff0c;这里使用的是axis2 问题&#xff1a; 在本地开发&#xff0c;访问本地的http://localhost:8080/services/ims?wsdl&#xff0c;正常访问 但是打成jar包&#xff0c;不管是linux还是window启动&#xff0c;都访问不到&#xff0c;报错…...

永久删除 Elasticsearch 中的主节点

Elasticsearch 是一个开源分布式搜索和分析引擎&#xff0c;用于各种任务&#xff0c;例如全文搜索、日志分析和实时数据分析。 Elasticsearch 集群由一个或多个节点组成&#xff0c;每个节点可以具有多种角色&#xff0c;包括主节点&#xff08;master node&#xff09;、数据…...

从搜索引擎到答案引擎:LLM驱动的变革

在过去的几周里&#xff0c;我一直在思考和起草这篇文章&#xff0c;认为谷歌搜索正处于被颠覆的边缘&#xff0c;它实际上可能会影响 SEO 作为业务牵引渠道的可行性。 考虑到谷歌二十多年来的完全统治地位&#xff0c;以及任何竞争对手都完全无力削弱它&#xff0c;坦率地说&…...

IDEA如何进行远程Debug调试

背景&#xff1a; 使用docker进行CVE漏洞复现的时候&#xff0c;由于只能黑盒进行复现&#xff0c;并不能知道为什么会产生这个漏洞&#xff0c;以及漏洞的POC为什么要这么写&#xff0c;之前我都是通过本地debug来进行源码分析&#xff0c;后来搜了一下&#xff0c;发现可以进…...

故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅...

C语言数据结构之二叉树

少年恃险若平地 独倚长剑凌清秋 &#x1f3a5;烟雨长虹&#xff0c;孤鹜齐飞的个人主页 &#x1f525;个人专栏 &#x1f3a5;前期回顾-栈和队列 期待小伙伴们的支持与关注&#xff01;&#xff01;&#xff01; 目录 树的定义与判定 树的定义 树的判定 树的相关概念 树的运用…...

《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)

文章目录 1.1 HTML 简介与历史&#xff08;&#x1f609;&#x1f310;&#x1f47d;踏上神奇的网页编程之旅&#xff09;1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…...

笔记本电脑Win11重装系统教程

在笔记本电脑Win11操作过程中&#xff0c;用户如果遇到很严重的系统问题&#xff0c;就可以重新正常的Win11系统&#xff0c;快速解决Win11系统问题。但是&#xff0c;部分新手用户不知道不知道如何操作才能给Win11笔记本电脑重装系统&#xff1f;以下小编分享笔记本电脑Win11重…...

突破编程_C++_面试(基础知识(3))

面试题5&#xff1a;函数调用的过程 C 中函数的调用包含参数入栈、函数跳转、保护现场、回复现场等过程&#xff0c;重点过程如下&#xff1a; &#xff08;1&#xff09;将函数的参数压入栈中&#xff0c;从右至左压入。 &#xff08;2&#xff09;调用函数时&#xff0c;将当…...

AI的安全应答之道

作者&#xff1a;统信UOS技术团队 2023,随着各种大语言模型的爆发&#xff0c;整个AI生态正处于从决策式AI进化到生成式AI的进程中。各类AI模型和AI应用层出不穷&#xff0c;也随之带来了与AI相关的各类潜在风险。AI开发和使用过程中的风险防范和治理&#xff0c;成为了不可忽…...

【昕宝爸爸小模块】日志系列之什么是分布式日志系统

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…...

如何在淘宝和Shopee上进行选品:策略和原则

在当今数字化时代&#xff0c;电商平台已经成为卖家们扩展业务和增加销售额的重要渠道。而在淘宝和Shopee这两个知名电商平台上进行选品时&#xff0c;卖家可以遵循一些相似的原则和策略&#xff0c;以确保他们的产品能够吸引目标客户并取得成功。本文将为您介绍一些在淘宝和Sh…...

C++/数据结构:二叉搜索树的实现与应用

目录 一、二叉搜索树简介 二、二叉搜索树的结构与实现 2.1二叉树的查找与插入 2.2二叉树的删除 2.3二叉搜索树的实现 2.3.1非递归实现 2.3.2递归实现 三、二叉搜索树的k模型和kv模型 一、二叉搜索树简介 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0…...

C++引用、内联函数、auto关键字介绍以及C++中无法使用NULL的原因

文章目录 一、引用1.1 引用概念1.2 引用特性1.3 常引用1.4 使用场景1.4.1 做参数1.4.2做返回值 1.5 引用和指针的区别1.6 小结一下 二、内联函数2.1 内联的概念2.2 内联的特性2.3 【面试题】 三、auto关键字(C11)3.1 类型别名思考3.2 auto简介 四、auto的使用细则4.1 基于范围的…...

RabbitMQ之三种队列之间的区别及如何选型

目录 不同队列之间的区别 Classic经典队列 Quorum仲裁队列 Stream流式队列 如何使用不同类型的队列​ Quorum队列 Stream队列 不同队列之间的区别 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中&#xff0c;拥有比较高的消息可靠性。 经典队列可以选…...

【ArcGIS微课1000例】0099:土地利用变化分析

本实验讲述在ArcGIS软件中基于两期土地利用数据,做土地利用变化分析。 文章目录 一、实验描述二、实验过程三、注意事项一、实验描述 对城市土地利用情况进行分析时,需要考虑不同时期土地利用图层在空间上的差异性,如农用地转建筑用地的空间变化。而该变化过程表现为各时期…...

学习鸿蒙基础(2)

arkts是声名式UI DevEcoStudio的右侧预览器可以预览。有个TT的图标可以看布局的大小。和html的布局浏览很像。 上图布局对应的代码&#xff1a; Entry //入口 Component struct Index {State message: string Hello Harmonyos //State 数据改变了也刷新的标签build() {Row()…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...