首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtGridLayout表现得像QVBoxLayout?

QtGridLayout表现得像QVBoxLayout?
EN

Stack Overflow用户
提问于 2013-09-24 17:03:58
回答 2查看 119关注 0票数 0

我在QGridLayout的工作中遇到了一些问题。下面是代码和后面的解释:

代码语言:javascript
复制
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);

上面的代码应该生成两个Q标签,将图像像素映射到其中一个标签,将像素映射标签和常规标签添加到QVBoxLayout中,然后将QVBoxLayout添加到QGridLayout中。输出网格应该将所有内容都放在一行中,但它位于一列中。有人能解释一下为什么会这样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-25 07:37:50

我假设GridContainerQVBoxLayout。您要将所有小部件添加到同一个布局中。这可能是您的问题(以及在for循环中初始化col变量的问题,user2672165指出了这一点)。

您可能应该在循环中创建一个新的GridContainer对象,并将其添加到TopGrid布局中,而不是一次又一次地在TopGrid布局中添加相同的布局。

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2013-09-24 17:43:41

将变量从循环中移出:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18987795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档