crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> объясните как правильно соединить сигнал со слотом
Гость_Гость_*
сообщение 13.10.2011, 9:35
Сообщение #1





Гости








    


не могу понять как правильно прописать слот. суть такая. есть 2 виджета. в первый испускает сигнал clicked()- по нажатию кнопки. второй виджет имеет слот, который нужно соединить с этим сигналом, т.е.
connect(choiceWidget, SIGNAL(clicked()), mainWidget, SLOT(reg_prepare()));

так в чьём коде прописывать коннект? пробовал и в первом, и во втором видже, пробовал так
QObject::connect(&choiceWidget, SIGNAL(clicked()), &mainWidget, SLOT(reg_prepare()));


в mainwidget.h прописано
public slots:
    void reg_prepare();


функция main выглядит так:
#include <QtGui/QApplication>
#include "choicewidget.h"
#include "mainwidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget mainWidget;
    ChoiceWidget choiceWidget;
        choiceWidget.show();    
        return a.exec();
}


спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 13.10.2011, 9:38
Сообщение #2





Гости








    


извините описался,
connect(button, SIGNAL(clicked()), mainWidget, SLOT(reg_prepare()));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 13.10.2011, 9:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  



в mainwidget.h
#include <QtGui/QApplication>
#include "choicewidget.h"
#include "mainwidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget mainWidget;
    ChoiceWidget choiceWidget;
        QObject::connect(&choiceWidget->Кнопка, SIGNAL(clicked()), &mainWidget, SLOT(reg_prepare()));
        choiceWidget.show();    
        return a.exec();
}

http://doc.crossplatform.ru/qt/4.7.x/signalsandslots.html
Как бы так


Сообщение отредактировал MJIbIu - 13.10.2011, 9:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 13.10.2011, 10:06
Сообщение #4





Гости








    


так компилируется, но пишет, что "Программа неожиданно завершилась."

выше я писал, что пробовал и так, и так, имел ввиду, что прописывать коннект как в mainWidget, так и в choiceWidget.

насколько я понимаю, писать в main коннекты неправильно. вот исходные данные, что внутри виджетов:
#include "mainwidget.h"

MainWidget::MainWidget()
{
...
}

void MainWidget::reg_prepare(){
...
}


ChoiceWidget:
#include "choicewidget.h"
#include "mainwidget.h"

ChoiceWidget::ChoiceWidget(QWidget *parent)
    : QWidget(parent)
{
...
}


хедеры:
#ifndef CHOICEWIDGET_H
#define CHOICEWIDGET_H

#include <QtGui/QWidget>
#include <QPushButton>
#include <QVBoxLayout>


class ChoiceWidget : public QWidget
{
    Q_OBJECT

public:
    ChoiceWidget(QWidget *parent = 0);
    ~ChoiceWidget();

private:
    QWidget *choiceWidget;
    QPushButton *reg;
    QPushButton *del;
    QVBoxLayout *layout;
};

#endif // CHOICEWIDGET_H


и MainWidget.h
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>

class MainWidget : public QWidget
{
public:
    MainWidget();

public slots:
    void reg_prepare();
    void del_prepare();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 13.10.2011, 10:16
Сообщение #5





Гости








    


Цитата(Гость @ 13.10.2011, 10:06) *
так компилируется, но пишет, что "Программа неожиданно завершилась."

выше я писал, что пробовал и так, и так, имел ввиду, что прописывать коннект как в mainWidget, так и в choiceWidget.

имел ввиду connect(button, clicked(), mainWidget, SLOT(reg_prepare));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 13.10.2011, 10:17
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Гость @ 13.10.2011, 11:06) *
выше я писал, что пробовал и так, и так, имел ввиду, что прописывать коннект как в mainWidget, так и в choiceWidget.


Если ты свой коннект прописываешь в MainWidget. Ему ничего не известно об объекте choiceWidget. И также на оборот.

Цитата(Гость @ 13.10.2011, 11:06) *
насколько я понимаю, писать в main коннекты неправильно.

почему неправильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 13.10.2011, 10:18
Сообщение #7





Гости








    


Цитата(Гость @ 13.10.2011, 10:16) *
Цитата(Гость @ 13.10.2011, 10:06) *
так компилируется, но пишет, что "Программа неожиданно завершилась."

выше я писал, что пробовал и так, и так, имел ввиду, что прописывать коннект как в mainWidget, так и в choiceWidget.

имел ввиду connect(button, SIGNAL(clicked()), mainWidget, SLOT(reg_prepare));

извините, тороплюсь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
registr
  опции профиля:
сообщение 13.10.2011, 10:37
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 115
Регистрация: 16.11.2009
Пользователь №: 1234

Спасибо сказали: 8 раз(а)




Репутация:   1  


Цитата(Гость @ 13.10.2011, 10:35) *
не могу понять как правильно прописать слот. суть такая. есть 2 виджета. в первый испускает сигнал clicked()- по нажатию кнопки. второй виджет имеет слот, который нужно соединить с этим сигналом, т.е.
connect(button, SIGNAL(clicked()), mainWidget, SLOT(reg_prepare()));

так в чьём коде прописывать коннект?

Коннект прописывай в конструкторе класса MainWidget или же в одной из функций этого класса так
connect(button, SIGNAL(clicked()), this, SLOT(reg_prepare()));

(button -- это конечно же указатель и разумеется button создается до коннекта)

Сообщение отредактировал registr - 13.10.2011, 11:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.10.2011, 18:14
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_Гость_* @ 13.10.2011, 12:35) *
так в чьём коде прописывать коннект?
в том, в котором видны оба виджета.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 17:02