UniGUI 之UniDBGrid

目录
1]DataSource设置
2]显示MEMO类型里的文字
3]显示悬浮提示
4]显示当前记录及总记录数
5]读取所有记录,及分页
6]在前面加上序号列
7]不显示标题栏
8]列排序
9]编辑 和 更新 数据
10]获得某单元格里的内容

11]标题别名

12]将某列设置为CheckBox格式

13]列标题下显示过滤编辑框,自动对列数据进行过滤

14.1]右键删除一条记录

      14.2]右键删除多条记录

15]将UniDBGrid数据另存为网页/CSV格式,导出

      15.2用uniGUI自带控件导出为Excel的xlsx格式,只适合1534版本以上

16]自画整行和单元格

17]UniDBGrid增加按钮列

18]Argument out of range.错误

19]一行所有列的编辑RowEditor

20]隔行背景色设置StripeRows

21]不显示Title按钮

22]UniDBGrid当前列名/当前行总数/数据遍历

23]设置标题行高,表头设置

24]设置某列的左右对齐(不含标题)

25]设置某列为进度条显示

26]unigui的dbgrid点击列标题进行排序

27]遍历选中行

28_UniDBGrid 实现分页,下拉选择每页数据行数,pageSize

29unidbgrid 如何替换某个字段的显示值 比如字段值为0的时候 显示成功  1显示不成功

30激活列头末尾的排序菜单,运用UniDBGrid列头实现排序


1] 数据源DataSource设置为DataSource1


 2]显示MEMO类型里的文字 

unidbgrid1.Columns[1].DisplayMemo:=true;  //显示MEMO类型里的文字,不设置只会显示(WIDEMEMO),不显示文字内容。


3] unidbgrid1.Columns[1].ShowToolTip:=true;//当鼠标悬浮在某单元格上,在鼠标后面显示单元格内容;


4]显示当前记录及总记录数

  function pagingBar.beforeInit(sender, config)
{ config.displayInfo = true;}

然后 点右上角 的 Apply关闭。


5]读取所有记录,及是否  分页。  WebOptions.FetchAll


 6]在前面加上序号列

方法1:Options

  方法二:

 在UniDBGrid的ExtEvents事件下加如下代码:

sender.headerCt.insert(0,new Ext.grid.RowNumberer({text:'',width:'auto',align:'center',menuDisabled:false}));


7]不显示标题栏;Options

  


8]排序 

 unidbgrid1.Columns[1].Sortable:= True;

 7中的标题栏要可见


9]编辑 和 更新 数据

0]

 放一个UniHiddenPanel,在里面加入编辑控件UniEdit3之类的

a)先将   wideMemo类型的要匹配 UniEdit,

 unidbgrid1.Columns[0].Editor:= UniEdit3;

 b)添加 过程

/双击修改数据
procedure TMainForm.UniDBGrid1SetCellValue(Sender: TObject; ACol, ARow: Integer;AField: TField; var Value: Variant);
beginself.UniDBGrid1.DataSource.DataSet.Edit;self.UniDBGrid1.DataSource.DataSet.FieldByName(self.UniDBGrid1.Columns.Items[Acol].FieldName).Value:=Value;self.UniDBGrid1.DataSource.DataSet.Post;
end;

 双击,修改后,回车,即可。


10]获得某单元格里的内容。

在UniDBGrid1的OnCellClick事件里

procedure TMainForm.UniDBGrid1CellClick(Column: TUniDBGridColumn);
beginif Column.FieldName = 'info' then //列名unimemo1.Text:=  VarToStr(Column.Field.Value) ;//Column.Field.Valueo为单元格的内容
end;

在UniDBGrid1的OnCellContextClick事件里

procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn;X, Y: Integer);
beginn1.Caption:= '删除  '+Column.Field.DataSet.FieldByName('aName').AsString;//单元格的内容UniPopupMenu1.Popup(X, Y, UniDBGrid1); // 弹出 右键菜单,绑定UniDBGrid1 end;

.


11]标题别名

  UniDBGrid1.Columns[1].Title.Caption := '成语';
  • 1.

12]将某列设置为CheckBox格式

     

 左边是最终结果,右边是数据库里 的数据。

     unidbgrid1.Columns[2].CheckBoxField.AutoPost:=True; 
//当用户点选CheckBox后,改变前端显示并根据该属性决定:
//True—立即自动提交到数据集中并刷新前端显示
//False—只改变前端显示,当记录滚动时再提交数据集unidbgrid1.Columns[2].CheckBoxField.BooleanFieldOnly:=False; 
//是否只针对Boolean字段,//True—只能识别Boolean字段,非Boolean字段将不能显示CheckBox//False—DisplayValues和FieldValues可以针对非Boolean字段进行处理unidbgrid1.Columns[2].CheckBoxField.DisplayValues := 'Day;Night' ;   //DisplayValues存储显示文字  ,不设置 则 显示 True/False;uniDBgrid1.Columns[2].CheckBoxField.Enabled:= True;       
// 一定为True;False则 不显示CheckBOxunidbgrid1.Columns[2].CheckBoxField.FieldValues:='0;1';    
//FieldValues存储字段值,unidbgrid1.Columns[2].Alignment := taLeftJustify;        //靠左 排列

13]列标题下显示过滤编辑框,自动对列数据进行过滤

        a].放一个TUniHiddenPanel控件在窗体上,然后将TUniEdit等编辑控件放置在这个隐藏的Panel内;

       b]一定要手动右键手动添加列 ;

       c]设置要过滤的列的Filtering,将其Editor属性设置对应的编辑控件

  FDQuery1.Open('select id,name,info from atb');UniDBGrid1.Columns[0].FieldName:='id';UniDBGrid1.Columns[1].FieldName:='name';UniDBGrid1.Columns[1].DisplayMemo := true;UniDBGrid1.Columns[1].Filtering.ChangeDelay := 900;  //当用户键入字符后,延时进行过滤处理的毫秒数UniDBGrid1.Columns[1].Filtering.Editor := UniEdit1;   //编辑控件 放在hidenPanelUniDBGrid1.Columns[1].Filtering.Enabled := true;   //Boolean是否允许进行过滤,一定为True;UniDBGrid1.Columns[1].Title.Caption:='成语';UniEdit1.CharEOL:=#13;  //表示回车 确定 开始  这很重要UniDBGrid1.Columns[2].FieldName:='info';UniDBGrid1.Columns[2].DisplayMemo := true;UniDBGrid1.Columns[2].Filtering.ChangeDelay := 900;UniDBGrid1.Columns[2].Filtering.Editor := UniEdit2;UniDBGrid1.Columns[2].Filtering.Enabled := true;UniDBGrid1.Columns[2].Title.Caption:='解释';UniEdit2.CharEOL:=#13;

     d]回车后的事件还得自己写。

procedure TMainForm.UniDBGrid1ColumnFilter(Sender: TUniDBGrid;  const Column: TUniDBGridColumn; const Value: Variant);
var    aFileterSQL: string;
beginaFileterSQL := 'select *  from atb  where 1=1 ';aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[1].FieldName+ ' like ''%' + UniDBGrid1.Columns[1].Filtering.VarValue + '%''';aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[2].FieldName+ ' like ''%' + UniDBGrid1.Columns[2].Filtering.VarValue + '%''';FDQuery1.Open(aFileterSQL);
end;
  • .

14]右键删除一条记录

      a]在MainModule的BrowserOptions.boDisableMouseRightClick设为True;//  不显示网页自带的右键菜单,显示自定义右键菜单

      b]添加右键菜单,放一个UniPopupMenu1在窗口上,并添加菜单aPopupMenu,并添加事件

    c]两个设置

//菜单执行
procedure TMainForm.aaClick(Sender: TObject);
begin        //删除该行MessageDlg('是否删除该行?', mtConfirmation, mbYesNo,procedure(Sender: TComponent; Res: Integer)beginCase Res ofmrYes: // 点Yes后执行的语句beginunidbgrid1.DataSource.DataSet.Delete;end;mrNo:   // 点No后执行的语句begincaption := 'mrNo'end;end;end);
end;//c]将uniDBGrid的右键事件绑定右键菜单事件。
procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn; X,  Y: Integer);
beginn1.Caption:= '删除  '+Column.Field.DataSet.FieldByName('aName').AsString;UniPopupMenu1.Popup(X, Y, UniDBGrid1);
end;
  • .

14.2]右键删除多条记录

    a]将这四项 勾选  dgRowSelect   dgCheckSelect dgMultiSelect dgDontShowSelected

    b]UniDBGrid1的OnCellContextClick事件

procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn;X, Y: Integer);
beginn1.Caption:= '删除  '+ inttostr(UniDBGrid1.SelectedRows.Count) +'  项?';UniPopupMenu1.Popup(X, Y, UniDBGrid1); // 弹出 右键菜单,绑定UniDBGrid1
end;

     c] 执行 删除 多行

var aStr:string;
begin
aStr:=   uniDBGrid6.DataSource.DataSet.FieldByname('Organize').AsString;// 如果该项已使用,不能删除FDQuery3.Open('SELECT distinct 所属部门 FROM MainTable where  所属部门 = '''+aStr +    '''');if (FDQuery3.RecordCount > 0) thenbeginShowMessage(aStr+'  已被使用中,不能删除!');Exit;end;UniDBGrid1.SelectedRows.Delete; // 删除多行
end;
  • 1.
  • .

  15]将UniDBGrid数据另存为网页/CSV格式,方便导出

procedure UniDBGridToHTML(aFDquery :TFDQuery;aHTMLFileName:string);
varaHTMLtext: TstringList;j: integer;
beginaHTMLtext := TstringList.Create;aHTMLtext.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  ' +'<html>   <head>    <title></title>   </head>  ' +'  <body>  <table border=".5pt solid windowtext;"; > ' +' <col width=72 span=3 style='' width:54pt''>');aHTMLtext.Add(' <tr > ');for j := 1 to aFDquery.FieldCount dobeginaHTMLtext.Add('<td>');aHTMLtext.Add(aFDquery.Fields.FieldByNumber(j).FieldName);   //  列 名aHTMLtext.Add('</td>');end;aHTMLtext.Add(' </tr> ');aFDquery.First;while not(aFDquery.Eof) dobeginaHTMLtext.Add(' <tr  > ');for j := 1 to aFDquery.FieldCount dobeginaHTMLtext.Add('<td>');aHTMLtext.Add(aFDquery.Fields.FieldByNumber(j).AsString);   //  列  值aHTMLtext.Add('</td>');end;aHTMLtext.Add(' </tr> ');aFDquery.Next;end;aHTMLtext.Add('</table>  </body>  </html> ');aHTMLtext.SaveToFile(aHTMLFileName);aHTMLtext.Free;
end;procedure UniDBGridToCSV(aFDquery :TFDQuery;aCSVFileName:string);//CSV格式
var
aHTMLtext: TstringList;
i, j: integer;
tempStr:string;
begin
aHTMLtext := TstringList.Create;
tempStr := '';
for j := aFDquery.FieldCount downto 1 do
tempStr := aFDquery.Fields.FieldByNumber(j).FieldName + ',' + tempStr;
tempStr := copy(tempStr, 0, Length(tempStr) - 1); //去掉最后一个 ,
aHTMLtext.Add(tempStr);
aFDquery.First;
while not(aFDquery.Eof) do
begin
tempStr := '';
for j := aFDquery.FieldCount downto 1 do
tempStr := aFDquery.Fields.FieldByNumber(j).AsString + ',' + tempStr;
tempStr := copy(tempStr, 0, Length(tempStr) - 1); //去掉最后一个 ,
aHTMLtext.Add(tempStr);
aFDquery.Next;
end;
aHTMLtext.SaveToFile(aCSVFileName);
aHTMLtext.Free;
end;procedure TMainForm.UniButton1Click(Sender: TObject);
beginUniDBGridToHTML(FDquery1,'aa.html');
UniSession.SendFile('aa.html'  //服务器端  文件名,'anew.html'          //客户端 新下载 的文件名);
/
UniDBGridToCSV(FDquery1,'ae.csv');
UniSession.SendFile('ae.csv' //服务器端 文件名
,'MySearch.csv' //客户端 新下载 的文件名
);end;
  • 1.

15.2用uniGUI自带控件导出为Excel的xlsx格式,只适合1534版本以上

1】添加一个UniGridExcelExporter1控件到界面 上,可以设置它的一些属性

2】绑定UniDBGrid1的Exporter属性为1】中UniGridExcelExporter1,并在此设置Excel文件的一些属性

3】导出事件,UniButton1的导出代码:

UniDBGrid1.Exporter.ExportGrid;


 16]自画行和单元格

procedure TMainForm.UniDBGrid1DrawColumnCell(Sender: TObject; ACol,ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
beginif ACol=0 then    // 某列beginAttribs.Color:=$E0E0E0;Attribs.Font.Style:=[fsBold];end;if ARow=1 then   //某行beginAttribs.Color:=$ffffff;Attribs.Font.Style:=[fsItalic];end;if Column.FieldName='UnitPrice' thenbeginif Column.Field.AsFloat>100 thenbeginAttribs.Font.Color:=clMaroon;Attribs.Font.Style:=[fsBold, fsItalic];end;endelse if Column.FieldName='Quantity' thenbeginif Column.Field.AsInteger<200 thenbeginAttribs.Font.Color:=clRed;Attribs.Font.Style:=[fsBold];Attribs.Color:=clLtGray;end;end;
end;
  • 1.

17]UniDBGrid增加按钮列

a]将UniDBGrid1的Images属性设为UniNativeImageList1,双击UniNativeImageList1,添加几个image子目录下的小图片,用做按钮图片,如下侧左图所示。

b] 点中UniQuery1将其SQL属性如上侧右图所示配置查询语句

select * from custom;//获取UniDBGrid1关联表的各个字段

c]点击UniDBGrid1控件,在开发环境左上侧Structure区域选择UniDBGrid1的Columns,右键添加所有数据列,分别设置前五列的FieldName属性(关联字段名称)、Title->Caption属性(列标题名称)和Width属性(列宽),如下图所示:再新增一按钮列

d]点中最后一列,将其FieldName设为“button”(名字随意,输入时会提示数据库链接错误,多次忽略即可),将其Title->Caption设为“操作”,将其ActionColumn->Enabled属性设置为True,将其ActionColumn->Buttons属性打开,增加三个按钮,分别点击每个TUniGridActionButton-x按钮,设置其ButtonId(按钮编号)、Hint(提示信息)、ImageIndex(关联到UniNativeImageList1的图片编号)属性,如下图所示:

 e]点击UniDBGrid1,在开发环境左下侧Object Inspector区域选择Events,添加OnColumnActionClick事件,简单示意点击不同按钮调用不同事件:

procedure TMainForm.UniDBGrid1ColumnActionClick(Column: TUniDBGridColumn;ButtonId: Integer);
beginif ButtonId=0 then begin  // 左键点击 删除图标 删除一列UniDBGrid1.DataSource.DataSet.Delete;end;
end;

官方例子D:\Program Files\FMSoft\Framework\uniGUI\Demos\Desktop\Grid - ActionColumn


 18]Argument out of range.错误

Argument out of range.错误往往 是uniDBGrid有右键手动添加的固定列,删除该固定列。


19]一行所有列的编辑,RowEditor

uniDBGrid1.RowEditor:=Ture;

设置后,双击(可以在ClicksToEdit属性里设置)某一行,所有列的都可以编辑,最后点Confirm提交,点Cancel取消。


20]隔行背景色设置StripeRows

 uniDBGrid1.StripeRows:=True;


 21]不显示Title按钮

UniDBGrid1.Columns[0].Menu.MenuEnabled:=False;
  • 1.



22UniDBGrid当前列名/当前行总数/数据遍历/动态创建

Filtering.Editor

UniDBGrid1.Columns[UniDBGrid1.CurrCol].FieldName;//当前列名
UniDBGrid1.DataSource.DataSet.Refresh;//更新数据

unidbgrid1.DataSource.DataSet.RecordCount//当前行总数。

procedure TMainForm.UniFormCreate(Sender: TObject);//动态创建Filtering.Editor
Var
THidenPanel: TUniHiddenPanel;
TEdit: TUniEdit;
begin

THidenPanel:= TUniHiddenPanel.Create(self);
THidenPanel.Parent := Self; //<--------------------
THidenPanel.Name:= 'THiddenPanel';

TEdit:= TUniEdit.Create(self);
TEdit.Parent:= THidenPanel;
TEdit.Name:= 'TEdit';
TEdit.EmptyText:= 'teste';

if Assigned(TEdit) then
begin
UniDBGrid1.Columns[3].Filtering.Editor:= TEdit;
UniDBGrid1.Columns[3].Filtering.Enabled:= True;
end;

end;


23]设置标题行高

procedure TMainForm.UniFormCreate(Sender: TObject);
beginUniDBGrid1.Columns[0].Title.Caption := '<br/>' + UniDBGrid1.Columns[0].Title.Caption + '<br/><br/>';
//如果要更宽,多加几个<br/>UniDBGrid1.Columns[0].Title.Caption := '<br/>' + UniDBGrid1.Columns[0].Title.Caption + '<br/><br/><br/>';
end;
  • 6.

之前

之后 

.x-column-header{/*表头设置*/
color:black;/*字体颜色*/
font-size:13px;/*字体大小*/
height: 50px;/*表头高度*/
border: none;/*表头框线*/
background:#C1C1C1;/*表头背景*/
}
.GridLotacao .x-grid-column {/*带元素id的属性(设置栏),在unidbgrid中的layoutconfig属性中的cls子属性中加入GridLotacao名称*/height: 50px;
}.GridLotacao .x-grid-cell {/*带元素id的属性(设置单元格),在unidbgrid中的layoutconfig属性中的cls子属性中加入GridLotacao名称*/height: 50px !important;line-height: 50px !important;
}


 24]设置某列的左右对齐(不含标题)

UniDBGrid1.Columns[0].Alignment := taLeftJustify; // 靠左 排列TAlignment = (taLeftJustify, taRightJustify, taCenter);
  • 1.

 25]设置某列为进度条显示

注意:UniDBGrid1DrawColumnCell事件里不用调用类似

//  UniDBGrid1.Columns[3].Width := 90;
//  UniDBGrid1.Columns[0].Alignment := taLeftJustify; // 靠左 排列
UniDBGrid1.Columns[3]类似属性,要写在FormCreate
  • 3.

 a]假设FDQuery1的相关数据库设置都已连好。

 b]右击UniDBGrid1的Columns,新增与FDQuery1相对应的字段,进度条字段为整数类型pro

]

c]放一个UniProgressbarWidget1,并设置Min,Max属性0,100

 d]关联字段

 书写数据库代码

procedure TMainForm.UniFormCreate(Sender: TObject);
beginUniDBGrid1.Columns[0].Width := 90;FDQuery1.Connection := UniMainModule.FDConnection1;UniMainModule.FDConnection1.LoginPrompt := False; // 取消登录提示框UniMainModule.FDConnection1.Open('DriverID=SQLite;Database=test1.Sqlite3');FDQuery1.Open('select isDone   ,aName  ,id,pro from ToDoListTable');//这里写UniDBGrid1中对应的列名end;

还有两个参数可显示

要显示百分率,ShowPercent和ShowValue 必同时设为True


26]unigui的dbgrid点击列标题进行排序

procedure DBGridSortByCol(dbGrid: TUniDBGrid; Column: TUniDBGridColumn; Direction: Boolean);var OrderStr:string;OrderPos:integer;SqlStr:string;Para:TUniParams;DescStr:string;OldSqlStr:string;
begin
if Direction=True then
DescStr:=''
else
DescStr:=' desc';OldSqlStr:=(dbGrid.DataSource.DataSet as TUniQuery).SQL.Text;SqlStr:=LowerCase(OldSqlStr);Para:=(dbGrid.DataSource.DataSet as TUniQuery).Params;OrderPos:=Pos(' order ',SqlStr);if OrderPos=-1 then
beginSqlStr:=SqlStr+' order by '+Column.FieldName;
end
else
beginSqlStr:=Copy(SqlStr,0,OrderPos)+' order by '+Column.FieldName;;
end;(dbGrid.DataSource.DataSet as TUniQuery).Close;
(dbGrid.DataSource.DataSet as TUniQuery).SQL.Text:=SqlStr+DescStr;
(dbGrid.DataSource.DataSet as TUniQuery).Params:=Para;
(dbGrid.DataSource.DataSet as TUniQuery).Open;
end; 
  • 1

27]遍历选中行

var
i:integer;
aStr:string;
beginfor i := 0 to (UniDBGrid1.SelectedRows.Count - 1) do beginUniDBGrid1.DataSource.DataSet.Bookmark  :=  UniDBGrid1.SelectedRows[i];aStr:=aStr+'_'+ UniDBGrid1.DataSource.DataSet.FieldByName('设备型号').AsString;end;MessageDlg(aStr, mtConfirmation, [mbOK],nil);
end;
  • .


 28_UniDBGrid 实现分页,下拉选择每页数据行数,pageSize

 
  • 1.

29unidbgrid 如何替换某个字段的显示值 比如字段值为0的时候 显示成功  1显示不成功
  • 1.
procedure flagGetText(Sender: TField; var Text: string; DisplayText: Boolean);
procedure dbg_cmdlogDrawColumnCell(Sender: TObject; ACol, ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
 
  • 1.
procedure TUniFm_logCmd.flagGetText(Sender: TField; var Text: string;DisplayText: Boolean);
beginif Sender.Asinteger = 1 thenText := '成功 'elseText := '失败 ';
end;procedure TUniFm_logCmd.dbg_cmdlogDrawColumnCell(Sender: TObject; ACol,ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
beginif Column.FieldName = 'Flag' thenbeginColumn.Field.OnGetText := flagGetText;end ;
end;
  • 17.

30激活列头末尾的排序菜单,运用UniDBGrid列头实现排序

31UniDBGrid序号列添加标题

有人想要在UniDBGrid的序号列加上标题,就是这里

可以使用如下代码

UniSession.AddJS('MainForm.UniDBGrid1.columnManager.columns[0].setText("序号")');

32Unidbgrid自动调整列宽

UniDBGrid1 -> ClientEvents -> ExtEvents [Ext.data.Store[store] ] add store.load fn:

function store.load(sender, records, successful, eOpts)
{sender.grid.columnManager.columns.forEach(function(col){col.autoSize()})
}

UniDBGrid1.ForceFit:=True;//自适应宽度

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

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

相关文章

Redis设计与实现之字符串哈希表列表

目录 一、字符串 1、字符串编码 2、编码的选择 二、哈希表 1、字典编码的哈希表 2、压缩列表编码的哈希表 3、编码的选择 4、哈希命令的实现 三、列表 1、 编码的选择 2、 列表命令的实现 3、阻塞的条件 4、 阻塞 5、 阻塞因 LPUSH 、RPUSH 、LINSERT 等添加命令而…

【C语言】操作符详解(五)

目录 操作符的属性&#xff1a;优先级&#xff0c;结合性 优先级 结合性 表达式求值 整形提升 算术转换 问题表达式解析 表达式1 表达式2 表达式3 总结 操作符的属性&#xff1a;优先级&#xff0c;结合性 优先级 ⭐优先级&#xff1a;优先级指的是&#xff0c;如果一…

网络安全——Iptables防DDoS攻击实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 一、实验目的要求&#xff1a; 1、掌握常见DDoS攻击SYN Flood的攻击…

Cmake基础(4)

这篇文章在上一篇的基础之上应用多文件&#xff0c;即一个项目中添加多个文件 文章目录 GLOBsource_group排除文件 上一篇文章的cmake基本不变&#xff0c;这篇文章的重点在于add_executable(${EXECUTABLE_NAME} main.cpp) GLOB file(GLOB cpp_list ${CMAKE_CURRENT_SOURCE_…

Arrays.asList()方法:陷阱与解决之道

在Java编程中&#xff0c;Arrays类提供了一系列用于操作数组的实用方法。其中&#xff0c;​Arrays.asList()​方法是一个常用的方法&#xff0c;用于快速将数组转换为List集合。然而&#xff0c;这个方法存在一些潜在的陷阱&#xff0c;可能导致出现意外的行为。本文将介绍​A…

h5 hdf5 pytables 数据库 减少空间占用的方法

方法来源&#xff1a;https://forum.hdfgroup.org/t/hdf5-deleting-datasets-and-recovering-space/1293 h5 数据库&#xff0c;在删除一些数据&#xff0c;表&#xff0c;数组后&#xff0c;无法变小&#xff1b; 或是在多次读写后&#xff0c;会越来越大&#xff0c;并且有一…

python:import 自定义包或者.py文件时出现:ModuleNotFoundError: no module named 的问题解决

问题&#xff1a; 在以下的示例中&#xff0c;wuHanMoviesSprider.py文件&#xff0c;想要import引用指定目录下的Items类时&#xff0c;出现无法识别module模块的问题(from 的引用处报错)。 原因分析&#xff1a; 正常情况下&#xff0c;被引用的包(或目录)中存在一个空文件…

vue 实现点击复制文本到剪贴板

vue 实现点击复制文本到剪贴板 共四种方法 1. navigator.clipboard.writeText该方法需要在安全域下才能够使用&#xff0c;比如&#xff1a;https 协议的地址、127.0.0.1、localhost <template><div><el-button type"primary" click"btn1"…

Docker 部署 Lobe Chat 服务

拉取最新版本的 Lobe Chat 镜像&#xff1a; $ sudo docker pull lobehub/lobe-chat:latest使用以下命令来运行 Lobe Chat 容器: $ sudo docker run -d --name lobe-chat -p 10084:3210 -e OPENAI_API_KEYsk-xxxx -e OPENAI_PROXY_URLhttps://api.openai.com/v1 -e ACCESS_CO…

ES6 面试题 | 13.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

普冉(PUYA)单片机开发笔记(10): I2C通信-配置从机

概述 I2C 常用在某些型号的传感器和 MCU 的连接&#xff0c;速率要求不高&#xff0c;距离很短&#xff0c;使用简便。 I2C的通信基础知识请参见《基础通信协议之 IIC详细讲解 - 知乎》。 PY32F003 可以复用出一个 I2C 接口&#xff08;PA3&#xff1a;SCL&#xff0c;PA2&a…

C++ 运算符重载

目录 前言 算术运算符重载 加号运算符 位运算符重载 左移运算符 自增自减运算符重载 前置自增运算符 后置自增运算符 赋值运算符重载 等号赋值运算符重 关系运算符重载 相等 不等 函数调用运算符重载 总结 前言 在C中&#xff0c;运算符重载是一种强大的特性…

数据可视化---柱状图

import matplotlib.pyplot as plt import numpy as npdef plot_bar_chart(data, labels, colorsNone, title"Bar Chart", xlabel"X-Axis", ylabel"Y-Axis"):"""绘制柱状图&#xff0c;并在柱子上显示数量和比例。:param data: 包…

pytest之allure测试报告03:allure动态自定义报告

1、测试用例模块中引入allure&#xff1a;import allure 2、yaml文件中定义添加title、story的值&#xff1a; 3、测试用例中读取调用。eg:allure.dynamic.title() 4、运行报告查看&#xff1a;成功动态展示yaml文件中配置的story、title

共同编辑文档功能实现(websocket)

目录 前言 websocket封装 wangeditor下载 共同编辑文档代码实现 HTML样式部分 JS部分 css部分 前言 功能&#xff1a;实现文档共同编辑功能&#xff0c;可以实时接收到其他人的信息 思路&#xff1a;先调用接口获取相应的数据进行渲染&#xff0c;然后通过webSocket建…

当 Sealos 遇上区块链

当 Sealos 遇上区块链 拿着区块链技术不一定是去发币&#xff0c;很多业务系统也适合用这些技术&#xff0c;比如做个统一支付系统&#xff0c;积分系统等&#xff0c;可以做为一家公司的金融基础设施&#xff0c;或支付中台。拿链的技术去做有很多好处&#xff1a; 高可用&a…

【图的应用一:最小生成树】- 用 C 语言实现普里姆算法

目录 一、最小生成树 二、普里姆算法的构造过程 三、普里姆算法的实现 一、最小生成树 假设要在 n 个城市之间建立通信联络网&#xff0c;则连通 n 个城市只需要 n - 1 条线路。这时&#xff0c;自然会考虑这样一个问题&#xff0c;如何在最节省经费的前提下建立这个通信…

机器学习之无监督学习

聚类&#xff1a;发掘纵向结构的某种模式信息&#xff0c;某些x属于相同的分布或者类别 特征学习&#xff1a;发掘横向结构的某种模式信息&#xff0c;每一行都可以看成是一种属性或特征 密度估计&#xff1a;发掘底层数据分布&#xff0c;x都是从某个未知分布p(x)采出来的&a…

(四)STM32 操作 GPIO 点亮 LED灯 / GPIO工作模式

目录 1. STM32 工程模板中的工程目录介绍 2. GPIO 简介 3. GPIO 框图剖析 1&#xff09;保护二极管及上、下拉电阻 2&#xff09; P-MOS 管和 N-MOS 管 3&#xff09;输出数据寄存器 3.1&#xff09;ODR 端口输出数据寄存器 3.2&#xff09;BSRR 端口位设置/清除寄存器 4&a…

【Java代码审计】目录穿越篇

【Java代码审计】目录穿越篇 1.Java中的目录穿越2.目录穿越漏洞审计3.Java中目录穿越漏洞修复 1.Java中的目录穿越 目录穿越漏洞产生的本质是路径可控&#xff0c;一旦涉及文件的读取问题便会涉及java.io.File类&#xff0c;因此在审计这类漏洞时可以优先查找java.io.File引用…