[qt/c++] Tworzenie przycisku przez private slots

0

Witam, Plan jest taki: Klikam przycisk Elo, on znika i pojawia mi się 10 przycisków z napisem tekst. Czemu to nie działa? Z góry dzięki za pomoc. zamieszczam swój krótki kod bo wyjdzie to na lepsze niż bym dalej tłumaczył:

mainwindow.cpp

 #include "mainwindow.h"

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


    button = new QPushButton(tr("ELO"), this);
    myLayout->addWidget(button,0,1);
    setLayout(myLayout);
    connect ( button, SIGNAL(clicked()), this, SLOT( genere()) );


}

void ImageWidget::genere()
{
    for(int i=0; i<10; i++){
        buttons[i] = new QPushButton(this);
        buttons[i]->setText("Text");
    }
    myLayout2 = new QGridLayout(this);
   // myLayout2->setSizeConstraint(QLayout::SetFixedSize);
    for(int i=0; i<10; i++)
    {
        myLayout2->addWidget(buttons[i],0,i);
    }
    setLayout(myLayout2);
}

mainwindow.h

 #ifndef MAINWINDOW_H
#define MAINWINDOW_H

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

class ImageWidget : public QWidget
{
  public:
      ImageWidget(QWidget* parent=0);
  private:
      QPushButton *buttons[10], *button;
      QGridLayout *myLayout, *myLayout2;
  private slots:
      void genere();
};


#endif // MAINWINDOW_H

main.cpp

#include <QtGui/QApplication>
#include "mainwindow.cpp"

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

Nie widzę Q_OBJECT

0

a rzeczywiście zapomniałem, ale jak dodam to wyskakuje mi error: undefined reference to `vtable for ImageWidget'. I nie za bardzo rozumiem co poprawić. Jak by mógł ktoś wytłumaczyć to byłoby super;]

0

Taki błąd wyskakuje, gdy brakuje definicji zadeklarowanych metod. Pokaż jak kompilujesz.

0

Przebuduj cały projekt ( jeśli piszesz w QtCreator to on czasem tego wymaga ). W main dołącz mainwindow.h a nie mainwindow.cpp no i nazwa pliku nagłówkowego nie jest zgodna z nazwą klasy ( a dobry zwyczaj wymaga by tak było ).

edit:
Ja bym ten slot do generowania buttonów zrobił tak:

void ImageWidget::genere()
{
    for( int i = 0; i < 10; ++i )
    {
        buttons[ i ] = new QPushButton( "Text", this );
        myLayout->addWidget( buttons[ i ], 0, i );
    }
}

Po co ci myLayout2?
Konstruktor taki:

ImageWidget::ImageWidget( QWidget *parent )
    : QWidget( parent )
{
    button = new QPushButton( "ELO", this );
    myLayout = new QGridLayout( this );
    myLayout->addWidget( button );
    connect( button, SIGNAL( clicked() ), this, SLOT( genere() ) );
}
0

dzięki wielkie już działa wszystko:) moglibyście zapodać nazwę albo linka do jakiegoś kursu qt?

0

http://www.qtrac.eu/C++-GUI-Programming-with-Qt-4-1st-ed.zip
http://cartan.cas.suffolk.edu/oopdocbook/opensource/
http://qt.nokia.com/
http://www.qtcentre.org/content/

ten pierwszy link to jest ebook ( pierwsze wydanie - darmowe ), drugie kosztuje $50 jednak do samej nauki Qt to darmowe ci wystarczy. Drugi jest również darmową książką będącą wprowadzeniem do wzorców projektowych c++ dla Qt.

Polecam przede wszystkim przeglądnięcie przykładów dołączonych do Qt ( co prawda skupiają się bardziej na możliwościach Qt niż typowych problemach jednak dużo z nich idzie się dowiedzieć ) oraz inne źródła programów napisanych z użyciem tego frameworka.

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