精华内容
下载资源
问答
  • $ yarn add vue-input-autowidth 或者 $ npm install --save vue-input-autowidth 也可以在Unpkg上使用: ://unpkg.com/vue-input-autowidth 用法 import VueInputAutowidth from 'vue-input-autowidth' Vue . use...
  • Text::SimpleTable::AutoWidth - Text::SimpleTable::AutoWidth - 具有自动宽度选择功能的简单好看的 ASCII 表格 版本 版本 0.09 概要 use Text::SimpleTable::AutoWidth; my $t1 = Text::SimpleTable::AutoWidth->...
  • c#中panel控件AutoWidth="true"是什么意思?
  • grid所在的panel和grid自身都采取autowidth方式 [b]问题补充:[/b] 其实左边的panel里并不是只有grid. 真实的情况是,上面是grid,下面又有一个panel. yourgame,如果按您的方法,左边panel的布局采用layout...
  • 把Ext的GridPanel设置autoWidth为true时显示不正常 列会超出浏览器的右边界..必须设定width才能显示正常..但是如果width被定死了的话改变浏览器的分辨率后,GridPanel就不好看了.. 大家有什么好点的法子? ...
    不知道大家有没有遇到过..把Ext的GridPanel设置autoWidth为true时显示不正常
    
    列会超出浏览器的右边界..必须设定width才能显示正常..但是如果width被定死了的话改变浏览器的分辨率后,GridPanel就不好看了..
    大家有什么好点的法子?
    展开全文
  • vue导出excel并修改样式

    万次阅读 2019-09-29 17:23:07
    autoWidth = true , bookType = "xlsx" } = { } ) { // const merges = [`A1:${getCharCol(list.length - 2)}1`]; //合并单元格 /* original data */ filename = filename || "excel-...

    1.首先安装以下三个安装包

    • npm install --save xlsx(修改样式需要下载npm install --save xlsx-style)
    • npm install -S file-saver
    • npm install -D script-loader

    注意:如果安装了npm install --save xlsx-style
    会报错:This relative module was not found: ./cptable in ./node_modules/xlsx-style@0.8.13@xlsx-style/dist/cpexcel.js

    可以直接修改源码:
    在\node_modules\xlsx-style\dist\cpexcel.js 807行 的 var cpt = require(’./cpt’ + ‘able’); 改成 var cpt = cptable;

    也可以在项目vue.config.js 文件中添加

    module.exports = {
      lintOnSave: false,
      css: {
        loaderOptions: {
          sass: {
            data: `@import "~@/styles/variables.scss";`
          }
        }
      },  
      chainWebpack: config => {
      //在 chainWebpack 添加下面的一段代码
        config.externals({ "./cptable": "var cptable" });**
      },
      devServer: {}
    };
    
    
    
    1. 需要下载一个Blob.js (放在src 目录下)
    2. 新建一个Export2Excel.js
    //这是从网上的,改了一点点 Export2Excel.js
    /* eslint-disable */
    /* eslint-disable */
    require("script-loader!file-saver");
    import XLSX from "xlsx-style";
    
    function datenum(v, date1904) {
      if (date1904) v += 1462;
      var epoch = Date.parse(v);
      return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
    }
    
    function sheet_from_array_of_arrays(data, opts) {
      var ws = {};
      var range = {
        s: {
          c: 10000000,
          r: 10000000
        },
        e: {
          c: 0,
          r: 0
        }
      };
      for (var R = 0; R != data.length; ++R) {
        for (var C = 0; C != data[R].length; ++C) {
          if (range.s.r > R) range.s.r = R;
          if (range.s.c > C) range.s.c = C;
          if (range.e.r < R) range.e.r = R;
          if (range.e.c < C) range.e.c = C;
          var cell = {
            v: data[R][C]
          };
          if (cell.v == null) continue;
          var cell_ref = XLSX.utils.encode_cell({
            c: C,
            r: R
          });
    
          if (typeof cell.v === "number") cell.t = "n";
          else if (typeof cell.v === "boolean") cell.t = "b";
          else if (cell.v instanceof Date) {
            cell.t = "n";
            cell.z = XLSX.SSF._table[14];
            cell.v = datenum(cell.v);
          } else cell.t = "s";
    
          ws[cell_ref] = cell;
        }
      }
      if (range.s.c < 10000000) ws["!ref"] = XLSX.utils.encode_range(range);
      return ws;
    }
    
    function Workbook() {
      if (!(this instanceof Workbook)) return new Workbook();
      this.SheetNames = [];
      this.Sheets = {};
    }
    
    function s2ab(s) {
      var buf = new ArrayBuffer(s.length);
      var view = new Uint8Array(buf);
      for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
      return buf;
    }
    
    function export_json_to_excel({
      title,
      multiHeader = [],
      header,
      data,
      filename,
      merges = [],
      autoWidth = true,
      bookType = "xlsx"
    } = {}) {
      // const merges = [`A1:${getCharCol(list.length - 2)}1`]; //合并单元格
      /* original data */
      filename = filename || "excel-list";
      data = [...data];
    
      data.unshift(header);
      if (title) {
        data.unshift(title);
      }
      for (let i = multiHeader.length - 1; i > -1; i--) {
        data.unshift(multiHeader[i]);
      }
      var ws_name = "SheetJS";
      var wb = new Workbook(),
        ws = sheet_from_array_of_arrays(data);
    
      if (merges.length > 0) {
        if (!ws["!merges"]) ws["!merges"] = [];
        merges.forEach(item => {
          ws["!merges"].push(XLSX.utils.decode_range(item));
        });
      }
    
      if (autoWidth) {
        /*设置worksheet每列的最大宽度*/
        const colWidth = data.map(row =>
          row.map(val => {
            /*先判断是否为null/undefined*/
            if (val == null) {
              return {
                wch: 13
              };
            } else if (val.toString().charCodeAt(0) > 255) {
              /*再判断是否为中文*/
              return {
                wch: val.toString().length * 2
              };
            } else {
              return {
                wch: val.toString().length
              };
            }
          })
        );
        // console.log(colWidth);
        /*以第一行为初始值*/
        let result = colWidth[0];
        colWidth[0][0]["wch"] = 13;
        // console.log(colWidth[0][0]["wch"]);
        for (let i = 1; i < colWidth.length; i++) {
          for (let j = 0; j < colWidth[i].length; j++) {
            if (result[j]["wch"] < colWidth[i][j]["wch"]) {
              result[j]["wch"] = colWidth[i][j]["wch"];
            }
          }
        }
        ws["!cols"] = result;
      }
    
      /* add worksheet to workbook */
      wb.SheetNames.push(ws_name);
      wb.Sheets[ws_name] = ws;
      var dataInfo = wb.Sheets[wb.SheetNames[0]];
    
      // const borderAll = {
      //   //单元格外侧框线
      //   top: {
      //     style: "thin"
      //   },
      //   bottom: {
      //     style: "thin"
      //   },
      //   left: {
      //     style: "thin"
      //   },
      //   right: {
      //     style: "thin"
      //   }
      // };
      //给所以单元格加上边框
      // for (var i in dataInfo) {
      //   if (i == '!ref' || i == '!merges' || i == '!cols' || i == 'A1') {
    
      //   } else {
      //     dataInfo[i + ''].s = {
      //       border: borderAll
      //     }
      //   }
      // }
    
      // 标题行
      let arr = [
        "A1",
        "B1",
        "C1",
        "D1",
        "E1",
        "F1",
        "G1",
        "H1",
        "I1",
        "J1",
        "K1",
        "L1",
        "M1",
        "N1",
        "O1",
        "P1",
        "Q1",
        "R1",
        "S1",
        "T1",
        "U1",
        "V1",
        "W1",
        "X1",
        "Y1",
        "Z1"
      ];
      // arr.some(function(v) {
      //   let a = merges[0].split(":");
      //   if (v == a[1]) {
      //     dataInfo[v].s = {};
      //     return true;
      //   } else {
      //     dataInfo[v].s = {};
      //   }
      // });
      //设置主标题样式
      let style = {
        font: {
          // name: "宋体",
          // sz: 18,
          color: { rgb: "000000" },
          bold: true
          // italic: false,
          // underline: false
        },
        alignment: {
          horizontal: "center",
          vertical: "center"
        }
    
        // fill: {
        //   fgColor: {rgb: "008000"},
        // },
      };
    
      // dataInfo["B1"].s = style;
      // dataInfo["A1"].s = style;
    
      //excel标题样式
      for (var i = 0; i < header.length; i++) {
        dataInfo[arr[i]].s = style;
      }
      var wbout = XLSX.write(wb, {
        bookType: bookType,
        bookSST: false,
        type: "binary"
      });
      saveAs(
        new Blob([s2ab(wbout)], {
          type: "application/octet-stream"
        }),
        `${filename}.${bookType}`
      );
    }
    function toExportExcel(tHeader, data, filename) {
      import("@/excel/Export2Excel").then(excel => {
        //表头对应字段
    
        excel.export_json_to_excel({
          header: tHeader,
          data: data,
          filename: filename,
          autoWidth: true,
          bookType: "xlsx"
        });
      });
    }
    export { toExportExcel, export_json_to_excel };
    
    
    
    

    文件目录如下在这里插入图片描述

    //util.js
    import "@/excel/Blob";
    
    export { json2excel, getCharCol, formatJson };
    
    // function parseTime(time, cFormat) {
    //   if (arguments.length === 0) {
    //     return null;
    //   }
    //   const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
    //   let date;
    //   if (typeof time === "object") {
    //     date = time;
    //   } else {
    //     if (typeof time === "string" && /^[0-9]+$/.test(time)) {
    //       time = parseInt(time);
    //     }
    //     if (typeof time === "number" && time.toString().length === 10) {
    //       time = time * 1000;
    //     }
    //     date = new Date(time);
    //   }
    //   const formatObj = {
    //     y: date.getFullYear(),
    //     m: date.getMonth() + 1,
    //     d: date.getDate(),
    //     h: date.getHours(),
    //     i: date.getMinutes(),
    //     s: date.getSeconds(),
    //     a: date.getDay()
    //   };
    //   // eslint-disable-next-line
    //   const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    //     let value = formatObj[key];
    //     // Note: getDay() returns 0 on Sunday
    //     if (key === "a") {
    //       return ["日", "一", "二", "三", "四", "五", "六"][value];
    //     }
    //     if (result.length > 0 && value < 10) {
    //       value = "0" + value;
    //     }
    //     return value || 0;
    //   });
    //   // eslint-disable-next-line
    //   return time_str;
    // }
    
    function json2excel(tableJson, filenames, autowidth, bookTypes) {
      import("@/excel/Export2Excel").then(excel => {
        var tHeader = [];
        var dataArr = [];
        var sheetnames = [];
        for (var i in tableJson) {
          tHeader.push(tableJson[i].tHeader);
          dataArr.push(formatJson(tableJson[i].filterVal, tableJson[i].tableDatas));
          sheetnames.push(tableJson[i].sheetName);
        }
        excel.export_json_to_excel({
          header: tHeader,
          data: dataArr,
          sheetname: sheetnames,
          filename: filenames,
          autoWidth: autowidth,
          bookType: bookTypes
        });
      });
    }
    // 数据过滤,时间过滤
    function formatJson(filterVal, jsonData) {
      return jsonData.map(v =>
        filterVal.map(j => {
          if (j === "timestamp") {
            return parseTime(v[j]);
          } else {
            return v[j];
          }
        })
      );
    }
    
    // 获取26个英文字母用来表示excel的列
    function getCharCol(n) {
      for (var i = 0; i < this.list.length; i++) {
        this.list[i].showActive = false;
        if (index == i) {
          this.list[index].showActive = true;
        }
      }
    
      let temCol = "",
        s = "",
        m = 0;
      while (n > 0) {
        m = (n % 26) + 1;
        s = String.fromCharCode(m + 64) + s;
        n = (n - m) / 26;
      }
      return s;
    }
    

    用法

    <div @click="exportExcel">下载短信模板</div>
    
    import { formatJson } from "@/util.js";
    import { toExportExcel } from "@/excel/Export2Excel";
    export default {
      data() {
        return {
          //表格的数据
          list: [
            {
              name: "蓝叶子",
              phone: 18955191234,
              content:
                "第一个为前置条件,最后一个为预期结果,需要带相应关键字,第一个为前置条件,最后一个为预期结果"
            },
            {
              name: "蓝叶子",
              phone: 18955191234,
              content: "第一个为前置条件,最后一个为预期结果,需要带相应关键字"
            },
            {
              name: "蓝叶子",
              phone: "18955191234",
              content:
                "第一个为前置条件,最后一个为预期结果,需要带相应关键字,zhenhgdsdfsff"
            },
            {
              name: "蓝叶子",
              phone: 18955191234,
              content: "第一个为前置条件,最后一个为预期结果,需要带相应关键字"
            },
            {
              name: "蓝叶子",
              phone: "18955191234",
              content:
                "第一个为前置条件,最后一个为预期结果,需要带相应关键字,zhenhgdsdfsff"
            },
            {
              name: "蓝叶子",
              phone: 18955191234,
              content: "第一个为前置条件,最后一个为预期结果,需要带相应关键字"
            },
            {
              name: "蓝叶子",
              phone: "18955191234",
              content:
                "第一个为前置条件,最后一个为预期结果,需要带相应关键字,zhenhgdsdfsff"
            }
          ]
        };
      },
      methods: {
        exportExcel() {
          const filterVal = [];
          const list = this.list.map((item, index) => {
            if (index === 0) {
              for (var k in item) {
                filterVal.push(k);
              }
            }
            return {
              name: item.name,
              phone: +item.phone, //转成number
              content: item.content
            };
          });
          const tHeader = ["姓名", "手机号", "内容"]; //表头
          const data = formatJson(filterVal, list);
          const filename = "短信模板";
    
          toExportExcel(tHeader, data, filename);
        }
      }
    };
    

    下载的效果如下:
    在这里插入图片描述
    这是从页面摘拆出来的,如果有问题,欢迎指出,谢谢!

    展开全文
  • merges'].push(XLSX.utils.decode_range(item)) }) } if (autoWidth) { /*设置worksheet每列的最大宽度*/ const colWidth = data.map(row => row.map(val => { /*先判断是否为null/undefined*/ if (val == null) { ...

    1、Export2Excel.js 文件内容

    /* eslint-disable */
    /** 导出Excel需要依赖
    * npm install xlsx file-saver -S
    * npm install script-loader -S -D 
    */
    
    import { saveAs } from 'file-saver'
    // import XLSX from 'xlsx'
    import XLSX from 'xlsx-style' //添加斜线这样引入XLSX
    
    function generateArray (table) {
      var out = [];
      var rows = table.querySelectorAll('tr');
      var ranges = [];
      for (var R = 0; R < rows.length; ++R) {
        var outRow = [];
        var row = rows[R];
        var columns = row.querySelectorAll('td');
        for (var C = 0; C < columns.length; ++C) {
          var cell = columns[C];
          var colspan = cell.getAttribute('colspan');
          var rowspan = cell.getAttribute('rowspan');
          var cellValue = cell.innerText;
          if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
    
          //Skip ranges
          ranges.forEach(function (range) {
            if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
              for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
            }
          });
    
          //Handle Row Span
          if (rowspan || colspan) {
            rowspan = rowspan || 1;
            colspan = colspan || 1;
            ranges.push({
              s: {
                r: R,
                c: outRow.length
              },
              e: {
                r: R + rowspan - 1,
                c: outRow.length + colspan - 1
              }
            });
          };
    
          //Handle Value
          outRow.push(cellValue !== "" ? cellValue : null);
    
          //Handle Colspan
          if (colspan)
            for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
        }
        out.push(outRow);
      }
      return [out, ranges];
    };
    
    function datenum (v, date1904) {
      if (date1904) v += 1462;
      var epoch = Date.parse(v);
      return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
    }
    
    function sheet_from_array_of_arrays (data, opts, fontStyle) {
      var ws = {};
      var range = {
        s: {
          c: 10000000,
          r: 10000000
        },
        e: {
          c: 0,
          r: 0
        }
      };
      let _opts = []
      if (opts) {
        _opts = opts
      }
      console.log('data==', data)
      for (var R = 0; R != data.length; ++R) {
        for (var C = 0; C != data[R].length; ++C) {
          if (range.s.r > R) range.s.r = R;
          if (range.s.c > C) range.s.c = C;
          if (range.e.r < R) range.e.r = R;
          if (range.e.c < C) range.e.c = C;
          var cell = {
            v: data[R][C]
          };
          //给单个表头添加斜线样式
          if (_opts) {
            if (R == _opts[0] && C == _opts[1]) {
              cell = {
                v: data[R][C],
                s: defaultCellStyle
              }
            }
          }
          //给某一单元格的字体自定义样式
          if (fontStyle) {
            if (R == data.length - 3 && C == 1) {
              cell = {
                v: data[R][C],
                s: fontCellStyle
              }
            }
          }
    
    
          if (cell.v == null) continue;
          var cell_ref = XLSX.utils.encode_cell({
            c: C,
            r: R
          });
    
          if (typeof cell.v === 'number') cell.t = 'n';
          else if (typeof cell.v === 'boolean') cell.t = 'b';
          else if (cell.v instanceof Date) {
            cell.t = 'n';
            cell.z = XLSX.SSF._table[14];
            cell.v = datenum(cell.v);
          } else cell.t = 's';
    
          ws[cell_ref] = cell;
        }
      }
      if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
      return ws;
    }
    
    let fontCellStyle = {
      font: {
        name: '宋体',
        sz: 18,
        color: { rgb: "ff0000" },
        bold: true,
      },
      alignment: {//对齐方式
        horizontal: 'center',//水平居中
        vertical: 'center',//竖直居中
      },
    }
    
    let defaultCellStyle = {
    
      alignment: {
        horizontal: 'center',
        vertical: 'center',
        indent: 0
      },
      border: {
        diagonalDown: true,//斜线方向
        diagonal: {
          color: { rgb: '303133' },
          style: 'thin'
        }//diagonalDown与diagonal必须同时使用
      }
    }
    
    
    function Workbook () {
      if (!(this instanceof Workbook)) return new Workbook();
      this.SheetNames = [];
      this.Sheets = {};
    }
    
    function s2ab (s) {
      var buf = new ArrayBuffer(s.length);
      var view = new Uint8Array(buf);
      for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
      return buf;
    }
    
    export function export_table_to_excel (id) {
      var theTable = document.getElementById(id);
      var oo = generateArray(theTable);
      var ranges = oo[1];
    
      /* original data */
      var data = oo[0];
      var ws_name = "SheetJS";
    
      var wb = new Workbook(),
        ws = sheet_from_array_of_arrays(data);
    
      /* add ranges to worksheet */
      // ws['!cols'] = ['apple', 'banan'];
      ws['!merges'] = ranges;
    
      /* add worksheet to workbook */
      wb.SheetNames.push(ws_name);
      wb.Sheets[ws_name] = ws;
    
      var wbout = XLSX.write(wb, {
        bookType: 'xlsx',
        bookSST: false,
        type: 'binary'
      });
    
      saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
      }), "test.xlsx")
    }
    
    export function export_json_to_excel ({
      multiHeader = [],
      header,
      data,
      filename,
      merges = [],
      maxWidth = '',
      autoWidth = true,
      bookType = 'xlsx',
      diagonal = [],//斜线
      fontStyle = false,
    } = {}) {
      /* original data */
      filename = filename || 'excel-list'
      data = [...data]
      data.unshift(header);
    
      for (let i = multiHeader.length - 1; i > -1; i--) {
        data.unshift(multiHeader[i])
      }
    
      var ws_name = "SheetJS";
      var wb = new Workbook()
      //加样式,如斜线
      if (diagonal) {
        var ws = sheet_from_array_of_arrays(data, diagonal, fontStyle);
      } else {
        var ws = sheet_from_array_of_arrays(data);
      }
      //此处可根据自己习惯做判断应用
    
    
      if (merges.length > 0) {
        if (!ws['!merges']) ws['!merges'] = [];
        merges.forEach(item => {
          ws['!merges'].push(XLSX.utils.decode_range(item))
        })
      }
    
      if (autoWidth) {
        /*设置worksheet每列的最大宽度*/
        const colWidth = data.map(row => row.map(val => {
          /*先判断是否为null/undefined*/
    
          if (val == null) {
            return {
              'wch': 10
            };
          }
          /*再判断是否为中文*/
          else if (val.toString().charCodeAt(0) > 255) {
            return {
              'wch': maxWidth ? val.toString().length * 2 > maxWidth ? maxWidth : val.toString().length * 2 : val.toString().length * 2
            };
          } else {
            return {
              'wch': maxWidth ? val.toString().length > maxWidth ? maxWidth : val.toString().length : val.toString().length
            };
          }
    
        }))
        /*以第一行为初始值*/
        let result = colWidth[0];
    
        for (let i = 1; i < colWidth.length; i++) {
          for (let j = 0; j < colWidth[i].length; j++) {
            if (result[j]['wch'] < colWidth[i][j]['wch']) {
              result[j]['wch'] = colWidth[i][j]['wch'];
            }
          }
        }
        ws['!cols'] = result;
      }
    
      if (fontStyle) {
    
      }
    
    
      /* add worksheet to workbook */
      wb.SheetNames.push(ws_name);
      wb.Sheets[ws_name] = ws;
    
      var wbout = XLSX.write(wb, {
        bookType: bookType,
        bookSST: false,
        type: 'binary'
      });
      saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
      }), `${filename}.${bookType}`);
    }
    
    

    处理导出数据js

    // 导出数据 转换成Excel表格需要的二维数组
    export function formatJson (filterVal, jsonData, fun) {
      return jsonData.map(v =>
        filterVal.map(j => {
          if (fun) {
            return fun(j, v[j])
          } else {
            return v[j]
          }
        })
    
      )
    }
    

    vue页面html使用

    import { letterArr } from '@/api'
    import { formatJson} from "@/utils/index"
    import('@/utils/Export2Excel').then(excel => {
            let tHeader = ['日期', '门票名称'']
            let filterVal = ['createTime', 'ticketName']
            let merges = []
            const merges_arr = [this.A_row_merge, this.B_row_merge]
            // 列合并,this.A_row_merge,this.B_row_merge为需要合并的列,在获取数据列表时做处理,格式为[[1,3],[4,5],[7,9]]
            for (let i = 0; i < merges_arr.length; i++) {
              const row_merge = merges_arr[i];
              for (let j = 0; j < row_merge.length; j++) {
                const element = row_merge[j];
                merges.push(`${letterArr[i]}${element[0] + 2}:${letterArr[i]}${element[1] + 2}`)
              }
            }
            const data = formatJson(filterVal, dataList)
            let filename = `销售汇总`
            excel.export_json_to_excel({
              header: tHeader, //表头 必填
              data, //具体数据 必填
              merges,
              diagonal: [0, 3],//斜线位置(第一行第四列)
              filename: filename, //非必填
            })
          })
    

    样式自定义相关属性中文参考:https://segmentfault.com/a/1190000022772664
    相关链接(英文):
    https://www.npmjs.com/package/xlsx-style

    展开全文
  • = autoWidth) { this->autoWidth = autoWidth; } } 六、控件介绍 超过150个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。...

    一、前言

    默认的qcombobox控件,如果元素item中的内容过长超过控件本身的宽度的话,会自动切掉变成省略号显示,有些应用场景不希望是省略号显示,希望有多长就显示多长,还有一种应用场景是需要设置下拉元素的高度为指定的高度,比如很多触摸屏上,如果程序中的下拉框太小,手指很不好点,很容易误操作,为了杜绝这种误操作,可以将下拉框高度变大,当然更好的办法还是类似于手机app一样弹出一个大大的滑动选择框会更好。

    二、实现的功能

    • 1:可设置下拉框元素高度
    • 2:可设置下拉框元素宽度
    • 3:可设置是否自动调整下拉框元素宽度,根据元素宽高自动调整

    三、效果图

    在这里插入图片描述

    四、头文件代码

    #ifndef COMBOBOX_H
    #define COMBOBOX_H
    
    /**
     * 自定义宽高下拉框控件 作者:feiyangqingyun(QQ:517216493) 2017-4-11
     * 1:可设置下拉框元素高度
     * 2:可设置下拉框元素宽度
     * 3:可设置是否自动调整下拉框元素宽度,根据元素宽高自动调整
     */
    
    #include <QComboBox>
    
    #ifdef quc
    #if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
    #include <QtDesigner/QDesignerExportWidget>
    #else
    #include <QtUiPlugin/QDesignerExportWidget>
    #endif
    
    class QDESIGNER_WIDGET_EXPORT ComboBox : public QComboBox
    #else
    class ComboBox : public QComboBox
    #endif
    
    {
        Q_OBJECT
        Q_PROPERTY(int itemWidth READ getItemWidth WRITE setItemWidth)
        Q_PROPERTY(int itemHeight READ getItemHeight WRITE setItemHeight)
        Q_PROPERTY(bool autoWidth READ getAutoWidth WRITE setAutoWidth)
    
    public:
        explicit ComboBox(QWidget *parent = 0);
    
    protected:
        void showEvent(QShowEvent *);
    
    private:
        int itemWidth;                  //元素宽度
        int itemHeight;                 //元素高度
        bool autoWidth;                 //是否自动调整元素宽度
        int maxItemWidth;               //最大元素宽度
    
    public:
        int getItemWidth()              const;
        int getItemHeight()             const;
        bool getAutoWidth()             const;
    
    public Q_SLOTS:
        void setItemWidth(int itemWidth);
        void setItemHeight(int itemHeight);
        void setAutoWidth(bool autoWidth);
    };
    
    #endif // COMBOBOX_H
    
    
    

    五、核心代码

    #pragma execution_character_set("utf-8")
    
    #include "combobox.h"
    #include "qlistview.h"
    #include "qdebug.h"
    
    ComboBox::ComboBox(QWidget *parent) : QComboBox(parent)
    {
        itemWidth = 5;
        itemHeight = 20;
        autoWidth = true;
        this->setView(new QListView());
    }
    
    void ComboBox::showEvent(QShowEvent *)
    {
        if (autoWidth) {
            //自动计算所有元素,找到最长的元素
            QFontMetrics fm = this->fontMetrics();
            int count = this->count();
            for (int i = 0; i < count; i++) {
                int textWidth = fm.width(this->itemText(i));
                itemWidth = textWidth > itemWidth ? textWidth : itemWidth;
            }
    
            //宽度增加像素,因为有边距
            this->view()->setFixedWidth(itemWidth + 20);
        }
    }
    
    int ComboBox::getItemWidth() const
    {
        return this->itemWidth;
    }
    
    int ComboBox::getItemHeight() const
    {
        return this->itemHeight;
    }
    
    bool ComboBox::getAutoWidth() const
    {
        return this->autoWidth;
    }
    
    void ComboBox::setItemWidth(int itemWidth)
    {
        if (this->itemWidth != itemWidth) {
            this->itemWidth = itemWidth;
            if (!autoWidth) {
                this->view()->setFixedWidth(itemWidth);
            }
        }
    }
    
    void ComboBox::setItemHeight(int itemHeight)
    {
        if (this->itemHeight != itemHeight) {
            this->itemHeight = itemHeight;
            this->setStyleSheet(QString("QComboBox QAbstractItemView::item{min-height:%1px;}").arg(itemHeight));
        }
    }
    
    void ComboBox::setAutoWidth(bool autoWidth)
    {
        if (this->autoWidth != autoWidth) {
            this->autoWidth = autoWidth;
        }
    }
    
    
    

    六、控件介绍

    1. 超过150个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt集成的控件数量。
    2. 每个类都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。qwt的控件类环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。
    3. 全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.13的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式linux等,不乱码,可直接集成到Qt Creator中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。
    4. 每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。
    5. 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。
    6. 每个控件默认配色和demo对应的配色都非常精美。
    7. 超过130个可见控件,6个不可见控件。
    8. 部分控件提供多种样式风格选择,多种指示器样式选择。
    9. 所有控件自适应窗体拉伸变化。
    10. 集成自定义控件属性设计器,支持拖曳设计,所见即所得,支持导入导出xml格式。
    11. 自带activex控件demo,所有控件可以直接运行在ie浏览器中。
    12. 集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。
    13. 所有控件最后生成一个动态库文件(dll或者so等),可以直接集成到qtcreator中拖曳设计使用。
    14. 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。
    15. 自定义控件插件开放动态库使用(永久免费),无任何后门和限制,请放心使用。
    16. 目前已提供26个版本的dll,其中包括了qt5.12.3 msvc2017 32+64 mingw 32+64 的。
    17. 不定期增加控件和完善控件,不定期更新SDK,欢迎各位提出建议,谢谢!
    18. Qt入门书籍推荐霍亚飞的《Qt Creator快速入门》《Qt5编程入门》,Qt进阶书籍推荐官方的《C++ GUI Qt4编程》。
    19. 强烈推荐程序员自我修养和规划系列书《大话程序员》《程序员的成长课》《解忧程序员》,受益匪浅,受益终生!
    20. SDK下载链接:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ 提取码:877p
    展开全文
  • this->autoWidth = autoWidth; } } 六、控件介绍 超过150个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt...
  • sheet[j].autoWidth) { sheet[j].autoWidth = true; } if (sheet[j].autoWidth) { /*设置worksheet每列的最大宽度*/ const colWidth = data.map(row => row.map(val => { /*先判断是否为null/undefined*/ if (val ==...
  • zlscTable = $('#lxzlTable').dataTable({ destroy: true, serverSide: true, responsive: true, processing:true, autoWidth: true,//自动计算列宽 deferRender: true,//设置延迟渲染,提高效率用 d...
  • jqGrid可通过hideCol, showCol函数动态设置列显示、列隐藏;当shrinkToFit=true时,动态设置显示列、隐藏列可能会导致表格宽度异常,此时可调用jqGrid的resizeGrid函数进行表格宽度重新计算。
  • Vue:表格导出Excel

    2019-05-15 21:55:47
    } export const export_json_to_excel = ({data, key, title, filename, autoWidth}) => { const wb = XLSX.utils.book_new(); data.unshift(title); const ws = XLSX.utils.json_to_sheet(data, {header: key, ...
  • DEV之GridControl导出报表

    千次阅读 2018-04-13 16:31:17
    导出为Excel:  依据GridControl控件内表格视图导出,数据量由GridControl的View决定 ...3.OptionsPrint下的各属性默认值都为true,需设置PrintHeader = false(不显示列头)和AutoWidth = false(不自适应宽度)
  • IE下Ext.GridPanel的autoWidth或者layout:'fit'会将宽度拉的很长的解决办法: 找了很多的地方,折腾了好几天,结果在javaeye发现一个方法,就是在定义 var grid = new Ext.grid.GridPanel({ bodyStyle:'width:...
  • 原因:我们在设置width的时候同时设置了autowidth属性为true,这使得width设置的值失效,源码: 解决:a.设置autowidth:false。b.手动设置表格宽度 mygrid.setGridWidth(w, false ); 如果出现...
  • } export const export_json_to_excel = ({data, key, title, filename, autoWidth}) => { const wb = XLSX.utils.book_new(); data.unshift(title); const ws = XLSX.utils.json_to_sheet(data, {header: key, ...
  • 一.特性(功能) 1.jQueryUI:控制是否使用jquerui的...2.autoWidth:控制Datatables是否自适应宽度,默认是true 注意:可以使用columns.width/columns.height来设置tr的宽高 如果使用bootstrap的时候,可以使用boot...
  • 如何在DW中设置自动列宽

    千次阅读 2016-05-07 23:14:21
    如何在DW中设置自动列宽 作者 华软 raymen 看到《如何在DW中设置自动列宽》,从我的类库中扣了一段代码回复了,后来又从旧...$PBExportComments$Performs autowidth on grid datawindow columns forward global ty
  • datatables设置列宽度无效

    千次阅读 2019-03-25 21:51:37
    datatable插件具有很好的自动适应性,在大多数情况下可以自适应,完美的展示列表内容。 实现其自适应的其特性为:"bAutoWidth": true,//自动宽度,默认的属性为true。 如果要修改其宽度,必须先将其设置为false,...
  • 如代码块中所示,必须要像下面一样设置下面的三个属性,shrinkToFit一定是false,默认是 true 的,也需要 autowidth 为 true // 自定义列宽 必须属性 shrinkToFit: false, // 设置水平滚动条 autoScroll : true...
  • VUE导入Excel

    2019-10-09 08:30:23
    autoWidth: this .autoWidth, bookType: this .bookType }) this .downloadLoading = false }) }, formatJson(filterVal, jsonData) { return jsonData.map(v => filterVal.map(j => { if (j ===...
  • width:auto和width:100%到底有什么区别? [1] width:100% 并不包含margin-left margin-right的属性bai值,直接取du其父容器的宽度加上zhi含margin-left /margin-right的值dao。如果设置了margin那新的width值是...
  • shrink-to-fit(自适应宽度)

    千次阅读 2015-07-28 14:16:14
    自适应宽度是指当未明确设定容器的宽度(或外边距设为auto)时,在特定的情况下容器的宽度会根据情况自行设定,而设定的结果往往并不是我们想要的。 W3C规范中描述了几种shrink-to-fit的情况 10.3.5 Floating, non-...
  • Fabric.js 实现文本自动换行

    千次阅读 2021-10-02 18:43:31
    在Fabric.js中,可以通过Text或 IText;创建文字,但是文本是无法换行 Fabric.js 提供了 Textbox 类,继承自IText; Textbox 类允许用户调整文本矩形的大小并自动换行。文本框的Y比例已锁定,用户只能更改宽度。...
  • EasyExcel自动设置列宽

    千次阅读 2021-01-25 11:57:34
    前言 用EaxyExcel默认的宽度,有时不够宽,数据会自动换行。为了追求美观,想手动设置列宽。 效果 设置前 设置后 代码实现 导入依赖。本人习惯用springboot自带的单元测试,一个注解就够,不用初学java那样到处写...
  • 问题一:前端报错 "style" defined 原因:1、页面表格中thead中th的条数与DataTable中 "columns"中的data数量不同 问题二:前端报错:"length"...原因:1、开启的分页功能,但是js中...
  • easyExcel自定义样式

    千次阅读 2020-12-21 14:47:31
    文章目录自定义行宽动态设置列宽设置固定列宽自定义样式标题样式内容样式使用样式 实际使用中,多数情况是使用Map读和写 自定义行宽 用easyExcel中的自动列宽很不好看,最后的导出单元格会非常宽,所以 ...
  • Devexpress TreeList 属性设置

    千次阅读 2018-03-30 09:32:11
    //tvwMonitorTree.OptionsView.AutoWidth = false; //禁用自动宽度 //tvwMonitorTree.Columns["stateName"].Width = 180; //设置指定列宽 //tvwMonitorTree.BorderStyle = DevExpress.XtraE...
  • textBox自动调整宽度

    千次阅读 2019-10-01 16:41:32
    Private Sub Text1_Change() Label1.AutoSize = True Label1 = Text1 Text1.Width = Label1.WidthEnd Sub 网上的,写的很巧妙,这人真的太有才了 http://zhidao.baidu.com/question/374535114.html ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,839
精华内容 1,535
关键字:

autowidth

友情链接: ArduinoISP.rar