QSS之QComboBox

news2024/11/22 15:55:12

 QComboBox在Qt开发过程中经常使用,默认的下载列表风格达不到设计师的要求,本篇介绍基本的QComboBox的qss设置。

属性意思
QComboBoxQComboBox基本样式
QComboBox:editable右边可选择按钮
QComboBox:!editable, QComboBox::drop-down:editable不可编辑或下拉时,comboxBox显示的背景状态
QComboBox:!editable:on, QComboBox::drop-down:editable:on下拉项展开时,comboxBox显示的背景状态
QComboBox:on下拉项展开时,comboxBox选中文字样式
QComboBox::drop-down下拉按钮样式 子控件填充方式
QComboBox::drop-down:hover下面按钮悬浮样式  鼠标悬浮样式
QComboBox::down-arrow下拉箭头样式
QComboBox::down-arrow:on下拉列表展开时下拉箭头样式

QString comboxStyle2  = QString(
                //1.界面上comboxBox样式 红色边框,圆角为3, 文字右边距边框13px, 最小宽度60px
                "QComboBox{border: 1px solid red;border-radius:3px;padding: 1px 18px 1px 13px;min-width: 60px;}"
                //2.右边可选择按钮 黄色
                "QComboBox:editable {background: yellow;}"
                //3.不可编辑或下拉时,comboxBox显示的背景状态
                "QComboBox:!editable, QComboBox::drop-down:editable {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);}"
                //4.下拉项展开时,comboxBox显示的背景状态
                "QComboBox:!editable:on, QComboBox::drop-down:editable:on {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #D3D3D3, stop: 0.4 #666666, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);}"
                //5.下拉项展开时,comboxBox选中文字样式 文字离顶部8px, 左边4px
                "QComboBox:on{padding-top:8px; padding-left:4px;}"
                //6.下拉按钮样式 子控件填充方式,位位顶部靠右边,宽度15px, 左边框一个竖线,颜色darkgray, 风格solid实现,右上角和右下角度与comboxBox一样都是3px
                // 这条设置了,上面第2点就可以不用设置了。
                "QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px; border-left-width: 1px; border-left-color: darkgray; border-left-style: solid;  border-top-right-radius: 3px;  border-bottom-right-radius: 3px;}"
                //7.下面按钮悬浮样式  鼠标悬浮在右边的下拉按钮是变成红色
                "QComboBox::drop-down:hover{background: #ff0000;}"
                //8.下拉箭头样式
                "QComboBox::down-arrow {image:url(:/image/com_drop_down.png);}"
                //9.下拉列表展开时下拉箭头样式, 下拉时箭头距顶部5px, 左边5px
                "QComboBox::down-arrow:on{top:5px;left:5px;}"
                );
    ui->comboBox_2->setStyleSheet(comboxStyle2);

这里下位列表没有样式,因此还需要为下载列表设置样式

属性意思
QComboBox QAbstractItemView列表项基本样式
QListView:item每个项的样式
QListView:item:hover鼠标悬浮项的样式
QListView:item:disabled禁用项的样式
QComboBox QAbstractScrollArea QScrollBar:vertical列表项滚动条样式
QComboBox QAbstractScrollArea QScrollBar::handle:vertical列表项滚动条滑块样式
QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover列表项滚动条滑块悬浮样式

下面是完整的代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void initView();
    void initData();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QListView>
#include <QScrollBar>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initView();
    initData();
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::initView()
{
    QString comboxStyle  = QString(
                "QComboBox{background:#FFFF00;border:1px solid #E4E2E2;padding: 1px 18px 1px 20px;border-radius:8px;color:#2F89FC;}"//未下拉时,QComboBox的样式
                "QComboBox:on{background:#00FF00;color:#2F00FC;}" // 点击QComboBox后的已选中项的样式
                "QComboBox QAbstractItemView {border:1px solid yellow;color:green;background-color:#FFFFFF;selection-color:blue;selection-background-color:red;}"//下拉展开后,整个下拉窗体样式
                "QComboBox QAbstractScrollArea QScrollBar:vertical{width: 10px;background-color: #f1ee04;}"
                "QComboBox QAbstractScrollArea QScrollBar::handle:vertical{border-radius:5px;background:rgb(255, 68, 20);}"
                "QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover{background:rgb(0, 255, 20);}"
                "QComboBox::drop-down {background:#FFFFFF;border-radius:8px;outline:none;}"
                "QComboBox::drop-down:hover{background: #ff0000;}"                       //上内边距、右内边距、下内边距、左内边距
                "QComboBox::down-arrow {width:22px;height:22px;background:transparent;padding:0px 20px 0px 0px;image:url(:/image/com_drop_down.png);}"
                "QComboBox::down-arrow:on{image: url(:/image/com_drop_arrow.png);}"
                );
    //padding //上内边距、右内边距、下内边距、左内边距
    ui->comboBox->setStyleSheet(comboxStyle);


    QString comboxStyle2  = QString(
                //1.界面上comboxBox样式 红色边框,圆角为3, 文字右边距边框13px, 最小宽度60px
                "QComboBox{border: 1px solid red;border-radius:3px;padding: 1px 18px 1px 13px;min-width: 60px;}"
                //2.右边可选择按钮 黄色
                "QComboBox:editable {background: yellow;}"
                //3.不可编辑或下拉时,comboxBox显示的背景状态
                "QComboBox:!editable, QComboBox::drop-down:editable {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);}"
                //4.下拉项展开时,comboxBox显示的背景状态
                "QComboBox:!editable:on, QComboBox::drop-down:editable:on {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #D3D3D3, stop: 0.4 #666666, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);}"
                //5.下拉项展开时,comboxBox选中文字样式 文字离顶部8px, 左边4px
                "QComboBox:on{padding-top:8px; padding-left:4px;}"
                //6.下拉按钮样式 子控件填充方式,位位顶部靠右边,宽度15px, 左边框一个竖线,颜色darkgray, 风格solid实现,右上角和右下角度与comboxBox一样都是3px
                // 这条设置了,上面第2点就可以不用设置了。
                "QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px; border-left-width: 1px; border-left-color: darkgray; border-left-style: solid;  border-top-right-radius: 3px;  border-bottom-right-radius: 3px;}"
                //7.下面按钮悬浮样式  鼠标悬浮在右边的下拉按钮是变成红色
                "QComboBox::drop-down:hover{background: #ff0000;}"
                //8.下拉箭头样式
                "QComboBox::down-arrow {image:url(:/image/com_drop_down.png);}"
                //9.下拉列表展开时下拉箭头样式, 下拉时箭头距顶部5px, 左边5px
                "QComboBox::down-arrow:on{top:5px;left:5px;}"
                );
    ui->comboBox_2->setStyleSheet(comboxStyle2);
    QString itemStyle2 = QString(
                "QComboBox QAbstractItemView {"
                "border-radius:8px;padding-left:10px;padding-right:1px;"
                "margin-top:10px;"                          //下拉框与ComboxBox之间的距离
                "outline: 1px solid #ffffff;"               //选中项外边框
                "border: 1px solid #f1f1f1;"                 //整个下拉窗体的边框
                "color:#333333;"
                "background-color:white;"
                "selection-color:red;"
                "selection-background-color:#2F89FC;}"
                );
    QString itemStyle1 = QString(
                "QComboBox QAbstractItemView {"
                "border-radius:3px;padding-left:20px;padding-right:10px;"
                "margin-top:10px;"                          //下拉框与ComboxBox之间的距离
                "outline: 1px solid #000000;"               //选中项外边框
                "border: 1px solid yellow;"                 //整个下拉窗体的边框
                "color: red;"                               //文字颜色
                "background-color:#999999;"                 //整个下拉窗体的背景色
                "selection-color:blue;"                     //下拉框选中项字体颜色
                "selection-background-color:#333333;}"      //下拉框选中项的背景色
                );
    //下拉展开后,整个下拉窗体样式
    QString itemStyle = QString(//padding-left:10px;padding-right:1px;
                "QComboBox QAbstractItemView {"
                "border-radius:8px;padding-left:10px;"
                //"margin-left:10px;"                          //下拉框与ComboxBox之间的距离
                "outline: 1px solid #ffffff;"                  //选中项外边框
                //"border: 1px solid #f1f1f1;"                 //整个下拉窗体的边框
                "background-color:white;}"
                );

    QString comboxStyle3  = QString(
                //1.界面上comboxBox样式 红色边框,圆角为3, 文字右边距边框13px, 最小宽度60px
                "QComboBox{border: 1px solid red;border-radius:8px;padding: 1px 18px 1px 13px;min-width: 60px;}"
                //2.不可编辑或下拉时,comboxBox显示的背景状态
                "QComboBox:!editable, QComboBox::drop-down:editable {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);}"
                //3.下拉项展开时,comboxBox显示的背景状态
                "QComboBox:!editable:on, QComboBox::drop-down:editable:on {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #D3D3D3, stop: 0.4 #666666, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);}"
                //4.下拉项展开时,comboxBox选中文字样式 文字离顶部8px, 左边4px
                "QComboBox:on{padding-top:8px; padding-left:4px;}"
                //5. 下接按钮背景透明,圆角与comboBox一样,无线框, 类似于隐藏按钮
                "QComboBox::drop-down {background:transparent;border-radius:3px;outline:none;}"
                //6.下拉箭头样式 箭头宽22px,高22px,背景透明,距右边20px,箭头图url
                "QComboBox::down-arrow {width:22px;height:22px;background:transparent;padding:0px 20px 0px 0px;image:url(:/image/com_drop_down.png);}"
                //7.下拉列表展开时下拉箭头样式
                "QComboBox::down-arrow:on{image: url(:/image/com_drop_arrow.png);}"
                //8.下载拉列的样式
                );
    ui->comboBox_3->setStyleSheet(comboxStyle3 + itemStyle);

    //下接列表的滚动条样式
    QString scrollStyle = QString(
                //"QComboBox QAbstractItemView::item{height:28px;margin-left:10px;padding-left:10px;}" //item项目的高度设置
                "QComboBox QAbstractScrollArea QScrollBar:vertical{width: 10px;background-color: #f1ee04;}"
                "QComboBox QAbstractScrollArea QScrollBar::handle:vertical{border-radius:5px;background:rgb(255, 68, 20);}"
                "QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover{background:rgb(0, 255, 20);}"
                );

    QListView *ListView = new QListView;
    ui->comboBox_4->setView(ListView);//必须设置
    //ui->comboBox_4->setEditable(true);
    ui->comboBox_4->setMaxVisibleItems(5);//设置下拉框当前页显示item个数。
    //下拉框设置圆角样式后,边角会存在阴影问题,这是Popup问题导致的,解决办法可以通过解决Popup来解决,也可以通过设置QComboBox本身属性。
    ui->comboBox_4->view()->window()->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
    ui->comboBox_4->view()->window()->setAttribute(Qt::WA_TranslucentBackground);
    //选中项的文字颜色及背景只能在QListView::item里设置,否则无效  padding-left:10px; 有白色边框
    QString listStyle = QString("QListView:item{height:30px;background-color:white;color:#333333;border-radius:8px;border:none;}"
                                "QListView:item:hover{height:30px;background-color:#2F89FC;color:white;border-radius:8px;border:0px solid #f1f1f1;;}"
                                "QListView:item:disabled{background-color:rgba(104,121,151,90%);color:#a0a0a0;border:0px solid #aaaaaa;}");
    QString comboxStyle4 = comboxStyle3 + itemStyle + scrollStyle + listStyle;
    ui->comboBox_4->setStyleSheet(comboxStyle4);

    //ListView->setStyleSheet(listStyle);
    ListView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}

void MainWindow::initData()
{
    QIcon   icon;
    //icon.addFile(":/image/icon24.png");
    ui->comboBox->addItem(icon, "bilibili---1");
    ui->comboBox->addItem(icon, "bilibili---2");
    ui->comboBox->addItem(icon, "bilibili---3");
    ui->comboBox->addItem(icon, "bilibili---4");
    ui->comboBox->addItem(icon, "bilibili---5");
    ui->comboBox->addItem(icon, "bilibili---6");
    ui->comboBox->addItem(icon, "bilibili---7");
    ui->comboBox->addItem(icon, "bilibili---8");
    ui->comboBox->addItem(icon, "bilibili---9");
    ui->comboBox->addItem(icon, "bilibili---11");
    ui->comboBox->addItem(icon, "bilibili---12");
    ui->comboBox->addItem(icon, "bilibili---13");
    ui->comboBox->addItem(icon, "bilibili---14");
    ui->comboBox->addItem(icon, "bilibili---15");
    ui->comboBox->addItem(icon, "bilibili---16");
    ui->comboBox->addItem(icon, "bilibili---17");
    ui->comboBox->addItem(icon, "bilibili---18");
    ui->comboBox->addItem(icon, "bilibili---19");

    QStringList szList{QStringLiteral("龙华"), QStringLiteral("龙岗"), QStringLiteral("福田"), QStringLiteral("宝安"), QStringLiteral("罗湖"), QStringLiteral("坪山"), QStringLiteral("大鹏"), QStringLiteral("光明")};

    QStringList cityList{QStringLiteral("昆明"), QStringLiteral("大理"), QStringLiteral("保山"), QStringLiteral("丽江"), QStringLiteral("玉溪"), QStringLiteral("曲靖"), QStringLiteral("昭通"), QStringLiteral("普洱")};

    QStringList proviceList{QStringLiteral("云南"), QStringLiteral("四川"), QStringLiteral("西藏"), QStringLiteral("新疆"), QStringLiteral("青海"), QStringLiteral("宁夏"), QStringLiteral("陕西"), QStringLiteral("山西"),
                QStringLiteral("湖南"), QStringLiteral("湖北"), QStringLiteral("广东"), QStringLiteral("广西"), QStringLiteral("福建"), QStringLiteral("浙江"), QStringLiteral("江西"), QStringLiteral("上海")};

    ui->comboBox_2->addItems(szList);
    ui->comboBox_3->addItems(cityList);
    ui->comboBox_4->addItems(proviceList);
}

参考:

https://doc.qt.io/qt-5/stylesheet-examples.html
https://doc.qt.io/qt-5/stylesheet-reference.html
https://blog.csdn.net/no_say_you_know/article/details/125335417
https://blog.csdn.net/qq_36651243/article/details/100765496

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

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

相关文章

Python中匹配模糊的字符串

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如何使用thefuzz 库&#xff0c;它允许我们在python中进行模糊字符串匹配。 此外&#xff0c;我们将学习如何使用process 模块&#xff0c;该模块允许我们在模糊…

离散数学 学习 之 5.3 一阶逻辑的推理理论

第一个证明中&#xff0c;最后三步的化简很重要&#xff0c;倒数第三步构造出一个可以化简出倒数第二步的公式&#xff0c;最后再化简 上面中的第 1&#xff0c; 2 步 和 3 &#xff0c; 4 步不能换&#xff0c;因为无法保证是同一个 c 尽量弄成前束范式 上面中2&#xff0c;3&…

无状态自动配置 DHCPv6无状态配置 DHCPv6有状态配置

1、无状态自动配置 配置命令 AR1 ipv6 #开启路由器ipv6报文转发功能 interface GigabitEthernet0/0/0 ipv6 enable #开启路由器接口IPv6报文转发功能 ipv6 address FC01::1/64 …

对比两个Series序列中的元素是否不相等,并以Series格式返回结果

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 逐一对比两个Series序列中 元素是否不相等&#xff0c;将结果 以Series格式返回 [太阳]选择题 关于以下代码的说法中正确的是? import pandas as pd a pd.Series([0,1,2],index["x"…

stm32 - 中断/定时器

stm32 - 中断/定时器 概念时钟树定时器类型基准时钟&#xff08;系统时钟&#xff09;预分频器 - 时基单元CNT计数器 - 时基单元自动重装寄存器 - 时基单元基本定时器结构通用定时器计数器模式内外时钟源选择 定时中断基本结构时序预分频器时序计数器时序 概念 时钟树 https:…

vue重修004上部

文章目录 版权声明组件的三大组成部分scoped解决样式冲突scoped原理2.代码演示 组件data函数说明演示 组件通信组件关系分类通信解决方案父子通信流程子向父通信代 props详解props校验props&data、单向数据流 小黑记事本&#xff08;组件版&#xff09;基础组件结构需求和实…

【AI处理器组合】python实现-附ChatGPT解析

1.题目 AI处理器组合 知识点数组 时间限制:1s 空间限制: 256MB 限定语言:不限 题目描述: 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中…

【计算机网络笔记九】I/O 多路复用

阻塞 IO 和 非阻塞 IO 阻塞 I/O 和 非阻塞 I/O 的主要区别&#xff1a; 阻塞 I/O 执行用户程序操作是同步的&#xff0c;调用线程会被阻塞挂起&#xff0c;会一直等待内核的 I/O 操作完成才返回用户进程&#xff0c;唤醒挂起线程非阻塞 I/O 执行用户程序操作是异步的&#xf…

阿里云PolarDB数据库详细介绍_3分钟看懂

阿里云PolarDB数据库是阿里巴巴自研的关系型分布式云原生数据库&#xff0c;PolarDB兼容三种数据库引擎&#xff1a;MySQL、PostgreSQL、Oracle&#xff08;语法兼容&#xff09;&#xff0c;目前提供云原生数据库PolarDB MySQL版、云原生数据库PolarDB PostgreSQL版和云原生数…

简单聊聊 TCP 协议

简单聊聊 TCP 协议 如何实现可靠传输 ?完全可靠存在比特差错存在丢包流水线可靠数据传输协议回退N步 (GBN)选择重传 (ARQ) 小结 TCPTCP 连接报文段结构序号和确认号 可靠数据传输避免重传超时时间加倍快速重传回退N步还是选择重传 流量控制连接管理拥塞控制拥塞原因拥塞控制方…

国庆10.03

运算符重载 代码 #include <iostream> using namespace std; class Num { private:int num1; //实部int num2; //虚部 public:Num(){}; //无参构造Num(int n1,int n2):num1(n1),num2(n2){}; //有参构造~Num(){}; //析构函数const Num operator(const Num &other)co…

想用ChatGPT写申请文书?那你肯定会被拒!

美国总统乔拜登&#xff08;Joe Biden&#xff09;、诗人TS艾略特&#xff08;T. S. Eliot&#xff09;和历史学家斯蒂芬安布罗斯&#xff08;Stephen Ambrose&#xff09;&#xff0c;他们的名字都曾与抄袭事件联系在一起。 其中&#xff0c;艾略特的抄袭行为是在他去世后才被…

A3纸内容分2页打在A4纸上

需求&#xff1a;文档是A3纸大小&#xff0c;因为打印机只能打A4纸&#xff0c;需要将内容分2页打在A4纸上。 网上搜索了一圈&#xff0c;可行解决方案如下&#xff1a; 1、打印纸的输出改成2分A4文件&#xff0c;首先设置打印输出的文档是A4纸大小&#xff0c;如图&#xff…

维基百科启用HTTPS的全球影响

2015 年 6 月&#xff0c;维基媒体基金会宣布维基百科默认启用 HTTPS&#xff0c;基金会称此举旨在保护访问者的隐私和安全&#xff0c;让用户能安全和不被审查的自由获取知识。在没有启用 HTTPS 的年代&#xff0c;审查者能知道访问者访问了维基百科上的哪些条目&#xff0c;它…

阿里云数据库RDS有哪些?细数关系型数据库大全

阿里云RDS关系型数据库大全&#xff0c;关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;阿里云百科分享阿里云RDS关系型数据库大全&#xff1a; 目录 阿里云RDS关系型数据库大全 …

项目实训 文章评论

1.需求实现 以下功能&#xff1a; 1&#xff09;基本增删改查API 2&#xff09;根据文章id查询评论 3&#xff09;评论点赞 数据库&#xff1a;articledb 2 文章微服务模块搭建 &#xff08;1&#xff09;搭建项目工程article&#xff0c;并设置pom.xml引入依赖&#xff…

阿里云数据库大全_3分钟看懂阿里云RDS和NoSQL数据库汇总

阿里云数据库大全&#xff1a;RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;数据仓库如AnalyticDB MySQL版、PostgreSQL、ClickHouse&#xff0c;阿里云还提供数据库管理工具如数…

leetcode 习题集 【9月】

leetcode 习题集 [9月] 回溯 77. 组合 class Solution { private:vector<vector <int>> result;vector<int> path;// path用来存放符合条件的结果 void backtracking(int n, int k, int startIndex){if(path.size() k){result.push_back(path);return;…

常用的分布式ID解决方案原理解析

目录 前言 一&#xff1a;分布式ID的使用场景 二&#xff1a;分布式ID设计的技术指标 三&#xff1a;常见的分布式ID生成策略 3.1 UUID 3.2 数据库生成 3.3 数据库的多主模式 3.4 号段模式 3.5 雪花算法 前言 分布式ID的生成是分布式系统中非常核心的基础性模块&#…

【翻译工具】如何复活谷歌翻译之二

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;善假于物&#…