[qt/c++] Stworzenie przycisku dopiero po Zdarzeniu

0

Witam jestem w trakcie pisania aplikacji odnośnie wielomianów. Zamysł jest taki: na początku na górze jeden przycisk za sprawą którego wprowadzamy stopień wielomianu(grade). I po wprowadzeniu tego stopnia i sprawdzeniu, że grade > 0, chciał bym aby utworzyło mi się (grade + 1) przycisków. I tu właśnie pojawia się problem, bo dopiero zaczynam programować w qt i nie wiem jak to zrobić aby one się pojawiły. Mam nadzieję że w miarę zrozumiale to wytłumaczyłem. A skoro już tu piszę to może znacie jakieś fajne kursy w qt albo książki.

0

Ja to bym widzial tak, ze masz tablice dynamiczna QPushButton* tab, i dopiero, jak wiesz jaki jest stopien dajesz tab = new QPushButton[stopien], jesli oczywsicie dobrze Cie zrozumialem :)

0

dobrze mnie zrozumiałeś, tyle że jeśli już to muszę mieć tablice wskaźników a nie przycisków, bo inaczej nie umiem ich inicjalizować.
Pewnie się da ale ja nie wiem jak, zawsze robiłem to od razu przy tworzeniu. Ale to to tak czy inaczej działa tylko bardziej zastanawia mnie czemu nie pokazuje tego przycisku ( czy w tym przypadku wielu przycisków ale skupmy się na jednym):

//..//
QPushButton *przycisk = new QPushButton(tr("numer1"), this);
connect ( przycisk, SIGNAL(clicked()), this, SLOT( genere()) );
//...//
private slots:
void genere()
{
   QPushButton *input_button = new QPushButton(tr("numer2"), this );
    input_button -> setGeometry(50, 100, 75, 30);
}

nie wiem czy takie fragmety wystarczą czy nie zamieścić całości?
Ogólnie jak klikam przycisk numer1 to powinna odpalić mi się funkcja genere i wyswietlic kolejny przycisk nie?

0

Nie skompilowalem tego, bo cos mam problem z QtCreatorem - moga byc jakies bledy (i z pewnoscia sa), ale logicznie to jest to, o co Ci chodzilo:

 
#include <QDialog>
#include <QWidget>
#include <QString>
#include <QGridLayout>
#include <QPushButton>
#include <QApplication>

class wpiszDane : public QWidget{
    Q_OBJECT
    public:
        wpiszDane(QWidget *parent);
        ~wpiszDane();

    private:
        QPushButton* buttons;
        int howMuch;
};


wpiszDane::wpiszDane(QWidget *parent):parent(null){
    QGridLayout* myLayout = new QGridLayout(this);
    myLayout->setSizeConstraint(QLayout::SetFixedSize);

    howMuch = 5;
    buttons = new QPushButton[5];

    for(int i=0; i<howMuch; i++){
        buttons[i] = QPushButton(this);
        button[i]->setText("Text");
    }

    for(int i=0; i<howMuch; i++){
        myLayout->addWidget(buttons[i],0,i);
    }
}

int main(int argc,char** argv){

    QApplication app(argc,argv);
    wpiszDane wd;
    wd.show();
    return app.exec();
}

Pozniej jesli czas pozwoli wkleje poprawna wersje, ale jesli Tobie chodzi tylko o tworzenie przyciskow, to chyba problem masz rozwiazany :)

0

A zeby wszystko zobaczyc, po petli for,

for(int i=0; i<howMuch; i++){
        myLayout->addWidget(buttons[i],0,i);
    }

powienienes jeszcze dac:

setLayout(myLayout);

:)

0

Proszę, jesli moderator sie nudzi ;) moze usunac moje 2 poprzednie posty - oto dzialajaca wersja: (Dalem tu na sztywno 10 przyciskow, sprobuj przeorobic na n :)

#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QApplication>

class ImageWidget : public QWidget
{

public:
    ImageWidget(QWidget* parent=0);
private:
    QPushButton* buttons[10];
};

ImageWidget::ImageWidget(QWidget* parent) : QWidget(parent)
{
    QGridLayout* myLayout = new QGridLayout(this);
    myLayout->setSizeConstraint(QLayout::SetFixedSize);

    for(int i=0; i<10; i++){
        buttons[i] = new QPushButton(this);
        buttons[i]->setText("Text");
    }

    for(int i=0; i<10; i++){
        myLayout->addWidget(buttons[i],0,i);
    }

    setLayout(myLayout);
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ImageWidget iw;
    iw.show();
    return a.exec();
}

0

dzięki ale nie do końca o to mi chodziło by umiem zrobić aby były przyciski. Ale ja chciałbym aby one pokazały się dopiero gdy nacisnę jakiś przycisk czyli : najpierw mam tylko jeden przycisk , jak go nacisnę to dopiero pojawiają mi się np kolejne dwa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1