首页 > 编程知识 正文

qt动态添加界面,qt动态显示控件

时间:2023-05-03 17:01:32 阅读:63332 作者:1623

需求背景

在“选择设备大楼”页上,大楼数量不固定,每行显示四个,大楼太多,滚动显示。

实现效果(DEMO )

gif记录的原因实际上是清除时不会残留白色。

键码#define COL 4 //每行大楼显示个数QVectorQPushButton* mVecButton; int 32 _ t mmax构建; /**栋总数*/int32_t mSelectedBtn; /**当前选择的大楼楼*/===================================} qpushbutton 3360 checked { %2}n ' }.arg (radius _ skin (8) gray _ hangyanbk _ skinb oldfont _ skin (24 ) black min ) intmaxbulidingcount=getmaxbuilding (; qignalmapper * click mapper=newqsignalmapper (this ); qushbutton * BTN [ maxbulidingcount ]; for(intI=0; i maxBulidingCount; I ) BTN [ I ]=newq推送按钮(ui-builidingwidget ); BTN [ I ]-settext (qstring 33603360 number ) I1 ) ntr ('栋').c_str ); BTN [ I ]-setsize policy (qsizepolicy 3360: preferred,QSizePolicy:Preferred ); BTN[I]-setstylesheet(commstyle ); BTN [ I ] -设置检查(true; mvecbutton.push_back(BTN[I]; 连接(mve cbutton [ I ]、信号(clicked )、clickMapper、slot(map ) ) click mapper-set mapping (mve cbutton [ I ] mve cbutton [ I ]-installeventfilter (this; } mve cbutton [0] -设置检查(true ); //默认情况下,第一个连接(click mapper,signal ) mapped(int )、this,slot )构件click () int ) ); int colCount=COL; int iitem=0; //剩余int row=0; 仅显示//1行时为if(mmaxbuildings=colcount ) { row=1; colcount=mmax构建; iitem=colCount; for(intI=0; i COL; I ) { ui-gridlayout-add构件(mve cbutton.at (I ),0,I,1,1 ) }; UI-gridlayout-setspacing(16; //1行的总栋数不足COL的情况下也显示4个,比总栋数大的地方用透明按钮填补。 否则,异常if (I=mmax buildings (BTN [ I ]-settext ) '); BTN [ I ] -设置样式表(trans BG _ skin ); BTN [ I ] -已启用(false ); } }返回; }else{ iitem=mMaxBuildings % COL; row=mmax构建/col; //如果有多,则向上舍入,说明最后一行的栋数小于规定数; 馀数为最后一行显示的栋数if(Iitem ) { row=1; } } qDebug () row; int itemIndex=0; //行数for(intI=0; i row; I ) { int btnIndx=0; //如果在最后一个循环中,最后一行元素不是第一个col个,则colif(I1==rowIitem ) { colCount=iitem; q调试() colcount ) colcount; //列数for(intj=0; j计数; j ) { ui-gridlayout-add构件(mve cbutton.at ) itemindex ),I,j btnIndx ); itemIndex; btnIndx; }UI-gridlayout-setspacing(16;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。