c++ - QtGridLayout behaving like a QVBoxLayout? -
i'm having issues working qgridlayout. here's code , explanation comes after:
for(int =0; i<filecount; i++) { int row = 0; int col = 0; qstring docname = filteredfiles.at(i).at(0); qlabel* doctitle = new qlabel; doctitle->settext(docname); qlabel* docicon = new qlabel; if(filteredfiles.at(i).at(2)== "word") { qpixmap icon("c:blah/blah/blah/wordicon.jpg"); docicon->setpixmap(icon); } else if(filteredfiles.at(i).at(2)== "excel") { qpixmap icon("c:/blah/blah/blah/excelicon.png"); docicon->setpixmap(icon); } else { qpixmap icon("c:/blah/blah/blah/ppicon.png"); docicon->setpixmap(icon); } gridcontainer->addwidget(docicon); gridcontainer->addwidget(doctitle); topgrid->addlayout(gridcontainer,row,col,1,1); col++; } maincontainer->addlayout(topgrid);
the above code supposed make 2 qlabels, pixmap image 1 of labels, add pixmapped label , regular label qvboxlayout , add qvboxlayout qgridlayout. output grid supposed have on single row it's in column. can explain why happening?
i'm assuming gridcontainer
qvboxlayout
. you're adding widgets same layout. that's problem (as problem col
variable being initialized inside loop, pointed out user2672165).
you should creating new gridcontainer
object inside loop , adding topgrid
layout, instead of adding same layout in topgrid
layout on , on again.
int col = 0; int row = 0; for(int =0; i<filecount; i++) { gridcontainer = new qvboxlayout; // create new layout qstring docname = filteredfiles.at(i).at(0); qlabel* doctitle = new qlabel; doctitle->settext(docname); qlabel* docicon = new qlabel; if(filteredfiles.at(i).at(2)== "word") { qpixmap icon("c:blah/blah/blah/wordicon.jpg"); docicon->setpixmap(icon); } else if(filteredfiles.at(i).at(2)== "excel") { qpixmap icon("c:/blah/blah/blah/excelicon.png"); docicon->setpixmap(icon); } else { qpixmap icon("c:/blah/blah/blah/ppicon.png"); docicon->setpixmap(icon); } gridcontainer->addwidget(docicon); gridcontainer->addwidget(doctitle); topgrid->addlayout(gridcontainer,row,col,1,1); col++; } maincontainer->addlayout(topgrid);
Comments
Post a Comment