Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide QScrollBar Qt

Sujet résolu
    14 janvier 2019 à 23:25:56

    Bonjour, pour mon programme, j'ai besoin de rajouter des QPushButton lorsqu'on appuie sur un bouton. J'ai donc voulu tout mettre dans un QScrollBar afin que si on ajoute trop de bouton ça ne ressemble pas à rien, le problème c'est que j'ai beau me casser le crâne, ça ne marche pas. Voici le code en question:

    MainWindow.cpp

        QTabWidget* tab = new QTabWidget;
        tab->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum);
        QWidget* historiquePage = new QWidget;
        QWidget* memoirePage = new QWidget;
    
        QVBoxLayout* historLayout = new QVBoxLayout;
        historLayout->setMargin(0);
        historLayout->setSpacing(0);
    
        QScrollArea* frame = new QScrollArea;
        frame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
        frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
        frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    
        historiqueLayout = new QVBoxLayout;
        historiqueLayout->setAlignment(Qt::AlignTop);
        historiqueLayout->setMargin(0);
        historiqueLayout->setSpacing(0);
    
        if (historique.isEmpty())
        {
            emptyHisto = new QLabel(tr("Aucun historique pour le moment"));
            emptyHisto->setFont(QFont("Heather", 14));
            emptyHisto->setMargin(10);
            emptyHisto->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum);
            historiqueLayout->addWidget(emptyHisto);
        }
        frame->setLayout(historiqueLayout);
    
        historLayout->addWidget(frame);
    
        clearHistory = new QPushButton("DELETE");
        clearHistory->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
        connect(clearHistory, &QPushButton::clicked, this, &MainWindow::deleteHistory);
    
        historLayout->addWidget(clearHistory);
        historLayout->setAlignment(clearHistory, Qt::AlignRight);
    
        historiquePage->setLayout(historLayout);
    
        tab->addTab(historiquePage, tr("Historique"));
        tab->addTab(memoirePage, tr("Mémoire"));
    

    Le programme n'est pas entier là je n'ai mis que la partie concerné. pour détailler j'ai un QTabWidget avec 2 onglet (le 2e ne sert a rien pour l'instant) le premier contient un QWidget principal pour tout englober, dans ce widget il y a un QVBoxLayout avec à l’intérieur la scrollBar en question et un bouton en bas. Dans le scrollBar il y a à nouveau un QVBoxLayout qui va contenir tout les boutons ajouter. Le programme marche très bien, mais le problème c'est que la scrollBar n’apparaît jamais et donc si j'ajoute beaucoup de bouton il devienne de plus en plus petit et ce n'est évidement pas ce que je veut.

    Voilà mon problème, merci d'avance à vous de m'aider :)

    -
    Edité par clemb01 14 janvier 2019 à 23:27:12

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2019 à 9:21:45

      Sur ton QScrollArea il ne faut pas faire de setLayout mais un setWidget et y mettre le widget qui sera scrollable.

      Dans ton cas tu peux donc créer un widget qui contiendra ton historiqueLayout ou bien ajouter directement emptyHisto au scroll area vu qu'il n'y a que ça dedans pour le moment. :)

      Tu peux ensuite ajouter un setWidgetResizable(true) sur ton QScrollArea. ;)

      frame->setWidget(emptyHisto);
      
      // ou
      
      historiqueLayout->addWidget(emptyHisto);
      historiqueWidget->setLayout(historiqueLayout);
      frame->setWidget(historiqueWidget);
      
      
      
      // puis
      frame->setWidgetResizable(true);

      -
      Edité par Maluna34 15 janvier 2019 à 9:25:34

      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2019 à 13:42:29

        Génial ça marche merci à toi et dire que c'était aussi simple :)

        Par contre la scrollBar verticale n’apparaît pas je suis obligé de scroll a la molette c'est normal ?

        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2019 à 14:17:02

          frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

          C'est toi qui l'a désactivée. ^^

          Tu peux laisser le comportement par défaut (elle n'apparait que si besoin) ou l'afficher tout le temps.

          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2019 à 14:22:49

            Bon j'ai réglé le problème j'ai supprimé:

            frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
            frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

            J'avais pas fait gaffe que j'affichais puis désactivait d'affilé la barre ^^

            Edit: Je n'avais pas vu ta réponse merci à toi de ton aide :)

            -
            Edité par clemb01 15 janvier 2019 à 14:27:58

            • Partager sur Facebook
            • Partager sur Twitter

            Besoin d'aide QScrollBar Qt

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown