[QT] łączenie przycisku ze slotem


(Kamiljano) #1

już próbowałem to zrobić na wszelkie możliwe sposoby, ale dalej mi działa jak trzeba. Zatrzymałem się na czymś takim:

#include 

#include 


class button:public QWidget

{

    //Q_OBJECT

public:

    button(QWidget *parent): QWidget(parent)

    {


    }


public slots:

    void f()

    {

        QMessageBox::information(0, "safd", "afsdfa", QMessageBox::Ok);

    }

};


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

{

    QApplication a(argc, argv);

    QWidget w;

    button *b=new button(&w);

    QPushButton *but=new QPushButton("asdfa", &w);

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

    w.show();


    return a.exec();

}

i dalej mi nie śmiga. Proszę o podpowiedź, co robię ciągle źle. Dlaczego po naciśnięciu przycisku ciągle nie odpala mi się funkcja f?


(Marcin240) #2

Napisałem ci gotowy kod który tworzy okno główne z przyciskiem, bo kliknięciu w button otrzymujesz komunikat:

main.cpp:

#include "mainwindow.h"

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

{

    QApplication app(argc, argv);

    MainWindow *window = new MainWindow();

    window->show();

    return app.exec();

}

mainwindow.h:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include 

#include 

#include 

#include 

class MainWindow : public QMainWindow

{

Q_OBJECT

private:

    QPushButton *button;

public:

    MainWindow();

private slots:

    void f();

};


#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"

MainWindow::MainWindow()

{

    button = new QPushButton("button", this);

    connect(button, SIGNAL(clicked()), this, SLOT(f()));

}


void MainWindow::f()

{

    QMessageBox::information(0, "safd", "afsdfa", QMessageBox::Ok);

}

(Kamiljano) #3

pozwolę sobie zauważyć, że to co napisałeś, to dokładnie to, do czego ja sam doszedłem, ale rozbite na kilka plików. Aha... no i mój kod się przynajmniej kompiluje.


(Marcin240) #4

U mnie pod ubuntu mój kod działa bez problemu a twój nie.


(Kamiljano) #5

ja to robię na windowsie :confused: ubuntu mam oprócz tego, ale myślałem, że tak samo będzie działać i tu i tu...

-- Dodane 28.07.2010 (Śr) 14:44 --

działa! źle zaznaczyłem przy kopiowaniu :smiley: dziękuję :smiley: tzn. dalej nie czuję, dlaczego twoje rozwiązanie działa, a moje nie, ale pewnie do tego dojdę :slight_smile: