我在使用QGridLayout时遇到了一些问题。以下是代码和解释:
for(int i =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);
上面的代码应该制作两个Qlabels,pixmap将图像映射到其中一个标签,将pixmapped标签和常规标签添加到QVBoxLayout,然后将QVBoxLayout添加到QGridLayout。输出网格应该包含在一行中的所有内容,但它位于一列中。有人可以解释为什么会这样吗?
答案 0 :(得分:1)
将变量col移出循环:
int col = 0;
for(int i =0; i<fileCount; i++)
{
int row = 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);
答案 1 :(得分:1)
我假设GridContainer
是QVBoxLayout
。您将所有小部件添加到同一布局中。这可能是你的问题(以及在你的for循环中初始化你的col
变量的问题,这是由user2672165指出的)。
您可能应该在循环中创建一个新的GridContainer
对象并将其添加到TopGrid
布局,而不是一遍又一遍地在TopGrid
布局中添加相同的布局。
int col = 0;
int row = 0;
for(int i =0; i<fileCount; i++)
{
GridContainer = new QVBoxLayout; // create a 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);