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, 10:06
Сообщение #2





Гости








    


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

выше я писал, что пробовал и так, и так, имел ввиду, что прописывать коннект как в 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();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 13.10.2011, 10:17
Сообщение #3


Студент
*

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

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




Репутация:   0  


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


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

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

почему неправильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 1.12.2024, 15:26