О сигналах и слотах в qt - PullRequest
0 голосов
/ 16 июля 2010

Я не знаю, как соединить две формы, я могу открыть вторую форму, но не могу получить доступ к первой.

Моя программа:

#include<QApplication>
#include<QLabel>
#include<QPushButton>
#include<QGridLayout>

class form1
{
    public:
        QWidget *window1;
        QLabel *l1;
        QPushButton *b1;
        QGridLayout *gl;
        form1(){}
        void setup1();
        void show1();


};

void form1::setup1()
{
    window1=new QWidget();
    gl=new QGridLayout(window1);
    l1=new QLabel("I AM IN FORM1",window1);
    b1=new QPushButton("NEXT",window1);
    gl->addWidget(l1,0,0);
    gl->addWidget(b1,1,0);
}
void form1::show1()
{
    window1->show();
}

class form2
{
    public:
        QWidget *window2;
        QPushButton *b2;
        form2(){}
        void setup2();
        void show2();

};

void form2::setup2()
{
    window2=new QWidget();
    b2=new QPushButton("NEXT",window2);
}
void form2::show2()
{
    window2->show();
}


class Myclass:public QObject,public form1,public form2
{


    public slots:
        void open();
        void back();
    public:
        Myclass()
        { 
            setup1();
            setup2();
            QObject::connect(b1,SIGNAL(clicked()),window1,SLOT(open()));
            QObject::connect(b2,SIGNAL(clicked()),window2,SLOT(back()));
        }


};

void Myclass::open()
{
    //window1->hide();
    //window2->show();
    show2();
}

void Myclass::back()
{
    window2->hide();
    l1->setText("BACK FROM FORM2");
    window1->show();
}

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    Myclass *m=new Myclass();
    m->show1();
    return app.exec();
}

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Ммм, как работает первый?Оба метода open () и back () принадлежат MyClass.Но ваши соединения идут в window1 и window2.Попробуйте, если это работает для "этого" вместо окна 1/2.

0 голосов
/ 17 июля 2010

Когда я запускаю вашу программу. Я получаю это время выполнения qt warnigs:

Object::connect: No such slot QWidget::open() in question.h:44
Object::connect: No such slot QWidget::back() in question.h:45

Так что ваши подключения недействительны. Слоты определены в Myclass, а не в window1 и window2. Заменить на

QObject::connect(b1,SIGNAL(clicked()),this,SLOT(open()));
QObject::connect(b2,SIGNAL(clicked()),this,SLOT(back()));

или короче:

connect(b1,SIGNAL(clicked()),this,SLOT(open()));
connect(b2,SIGNAL(clicked()),this,SLOT(back()));

и вы получите ожидаемое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...