2017-09-29 1 views
0

Constructeur:Comment centrer un widget dans QScrollArea?

ScrollArea::ScrollArea(...) 
{ 
    ... 
    end = myItems.count(); 
    for(int i=0; i<end; i++) 
    { 
     scrollItems.append(new ScrollItem(myItems.at(i), 0, width, i, this)); 
    } 
    scrollArea->setWidget(this); //must be last for auto-scrolling to work 
} 

fonction membre:

void ScrollArea::updateSelection(int selection) 
{ 
    foreach(ScrollItem* item, scrollItems) 
    { 
     if(item->updateSelection(selection, 0)) 
     { 
      scrollArea->ensureWidgetVisible(item); 
     } 
    } 
} 

Après l'exécution ScrollArea::updateSelection, il ressemble à ceci:

enter image description here

Je veux qu'il ressemble à ceci:

enter image description here

Google renvoie une question erronée (pour autant que je sache: Place widget in center of QScrollArea) et un tas d'ordure.

Répondre

0

Je ne sais toujours pas pourquoi QScrollArea::ensureWidgetVisible ne fonctionne pas, même avec des marges explicites, mais je trouve quelque chose qui fait:

void ScrollArea::updateSelection(int selection) 
{ 
    int item = -1; 

    int i = scrollItems.count(); 
    while(i) 
    { 
     i--; 
     if(scrollItems.at(i)->updateSelection(selection, 0)) 
     { 
      item = i; 
     } 
    } 

    if(item < 0) 
    { 
     return; 
    } 

    i = scrollItems.first()->height(); 
    item *= i; 
    item += i/2; 
    //item is now the position that should be centered 

    scrollArea->verticalScrollBar()->setValue(
       item - (scrollArea->height()/2) 
       ); 
} 

Je suis fondamentalement-force brute ce que je veux au lieu d'avoir la bibliothèque le faire. (et échouer)

+0

Je suis content que vous ayez travaillé avec 'verticalScrollBar() -> setValue'. – AlexanderVX