Problemy z podstawami QT


(Kamiljano) #1

próbuję stworzyć prosty przycisk, ale wysiadam już na samym początku, kiedy mam wykorzystać funkcję connect. Mam coś takiego:

#include 

#include 

#include 

class button :public QPushButton

{

     Q_OBJECT

public:

    button()

    {

        QPushButton("sdfa");

    }


    public slots:

    void fu(){

    QMessageBox::information(0,"sdf","sadfasfasdfsdaf",QMessageBox::Ok);

    }


};


int main(int argc, char *argv[])

{

    QApplication app(argc, argv);

    //QMessageBox::information(0,"sdf","sadfasfasdfsdaf",QMessageBox::Ok);

            QWidget window;

         QHBoxLayout layout;

         window.resize(320, 240);

         window.show();

         window.setWindowTitle(QApplication::translate("toplevel", "Top-level widget"));

        // QPushButton *bu=new QPushButton("safd");

         button *b=new button();

         QLineEdit *edit=new QLineEdit();

         layout.addWidget(b);

         layout.addWidget(edit);

         window.setLayout(&layout);

         return app.exec();

}

Jeśli nie napiszę na górze tego Q_OBJECT to niby się kompiluje, ale na moim przycisku nie wyświetla się żaden tekst. Jeżeli to zostawię, to się nie kompiluje, bo wywala error “undefined reference to vtable for button”. No i już w ogóle nie wiem gdzie mam wstawiać tego connecta i jakie mam mu argumenty podawać, żeby funkcja fu wreszcie mi się odpalała po kliknięciu. – Dodane 27.07.2010 (Wt) 18:48 – albo, czy nie dałoby się tego prościej jakoś zrobić, jak np.

#include 

#include 

#include 

#include 


void f(){

    QMessageBox::information(0,"sdfa","sfsadf",QMessageBox::Ok);

}


int main(int argc, char *argv[])

{

    QApplication app(argc, argv);

    //QMessageBox::information(0,"sdf","sadfasfasdfsdaf",QMessageBox::Ok);

            QWidget window;

         QHBoxLayout layout;

         window.resize(320, 240);

         QPushButton *b=new QPushButton("asdf",&window);

         QObject::connect(b, SIGNAL(clicked),&app, SLOT(f()));

         window.show();

         window.setWindowTitle(QApplication::translate("toplevel", "Top-level widget"));

         return app.exec();

}

tylko tak, żeby to jednak działało…