2013-09-24 4 views
0

У меня возникли проблемы с QGridLayout. Вот код и объяснение приходит после того, как:QtGridLayout ведет себя как QVBoxLayout?

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. Выходная сетка должна была иметь все в одной строке, но она находится в столбце. Может кто-нибудь объяснить, почему это происходит?

enter image description here

ответ

1

Я предполагаю, что GridContainer является QVBoxLayout. Вы добавляете все свои виджеты в один макет. Вероятно, это ваша проблема (а также проблема с вашей переменной col, инициализированной внутри цикла for, что было указано пользователем2672165).

Вы, вероятно, следует создать новый 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); 
1

Перемещения переменных цв из цикла:

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); 
+0

Спасибо за ответ! К сожалению, это не устранило проблему. Программа осталась прежней. – JonAmen

+0

Вы уверены, что были перестроены и запускали правильный двоичный файл? Коррекция выглядит эффективной. – user2672165

+0

Да, я перестроил все это. Не меняет ничего – JonAmen

Смежные вопросы