Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide Qt

Sujet résolu
    14 janvier 2019 à 19:20:37

    Bonjour, je suis en train de créer une calculatrice dans le style de celle de Windows. Elle marche très bien, j'ai donc voulu lui rajouter une fonction historique qui fonctionne très bien mais visuellement je n'arrive pas à faire ce que je veut et j'ai donc besoin d'aide.

    Voici un screen de l'appli:

     

    Quand je fais un calcul, il s'enregistre sur un bouton à droite et si on clique, on peut donc le récupérer:

    D'ailleurs le bouton n'affiche pas correctement le texte et je ne trouve pas comment régler ça. Mais le vrai problème, c'est que l'historique ce trouve dans un QScrollBar qui contient un QVBoxLayout qui contient les boutons, ensuite une méthode viens ajouter un bouton au QVBox mais ça ne se passe pas du tout comme je voudrais (photo):

    Les boutons devienne de plus en plus petit et s'empiles au lieu de s'ajouter a la suite des autres comme je voudrais et en plus la ScrollBar n'a pas l'air de fonctionner. J'utilise une méthode addHistory pour actualiser l'historique mais ça ne marche pas du tout.

    Voici le code concerné pour voir:

    mainwindow.cpp

    QScrollArea* frame = new QScrollArea;
        frame->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
        frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        frame->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum);
    
        QWidget* contenu = new QWidget;
        historiqueLayout = new QVBoxLayout;
        contenu->setLayout(historiqueLayout);
    
        emptyHisto = new QLabel("Aucun historique pour le moment        ");
        emptyHisto->setFont(QFont("Heather", 14));
        emptyHisto->setMargin(10);
        emptyHisto->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum);
    
        if (historique.isEmpty())
        {
            historiqueLayout->addWidget(emptyHisto);
            historiqueLayout->setAlignment(emptyHisto, Qt::AlignTop);
        }
    
        frame->setWidget(contenu);

    et la méthode:

    void MainWindow::addHistory(QString &calcul, QString &result, QLabel* display, QLabel* resultat)
    {
        if (historique.isEmpty() && !m_deleted)
        {
            m_deleted = true;
            delete emptyHisto;
        }
    
        historique.append(calcul + " =\n" + result);
    
        QPushButton* historiqueButton = new QPushButton(historique[historique.size() - 1]);
        historiqueButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
        connect(historiqueButton, &QPushButton::clicked, this, [this, calcul, result, display, resultat](){
            this->m_displayText = result;
            display->setText(m_displayText);
            resultat->setText(calcul);
        });
    
        historiqueLayout->addWidget(historiqueButton);
        historiqueLayout->setAlignment(historiqueButton, Qt::AlignTop);
    }

    J’espère que vous pourrez m'aider s'il faut d'autre info demander, je ne suis pas sur d'avoir tout bien expliqué.

    • Partager sur Facebook
    • Partager sur Twitter

    Aide 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