crossplatform.ru

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


  Ответ в объясните как правильно соединить сигнал со слотом
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 15.10.2011, 18:14
 
Цитата(Гость_Гость_* @ 13.10.2011, 12:35) *
так в чьём коде прописывать коннект?
в том, в котором видны оба виджета.
registr Дата 13.10.2011, 10:37
 
Цитата(Гость @ 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 создается до коннекта)
Гость Дата 13.10.2011, 10:18
 
Цитата(Гость @ 13.10.2011, 10:16) *
Цитата(Гость @ 13.10.2011, 10:06) *
так компилируется, но пишет, что "Программа неожиданно завершилась."

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

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

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


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

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

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

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

имел ввиду connect(button, clicked(), mainWidget, SLOT(reg_prepare));
Гость Дата 13.10.2011, 10:06
  так компилируется, но пишет, что "Программа неожиданно завершилась."

выше я писал, что пробовал и так, и так, имел ввиду, что прописывать коннект как в 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, 9:51
 
в 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
Как бы так
Гость Дата 13.10.2011, 9:38
  извините описался,
connect(button, SIGNAL(clicked()), mainWidget, SLOT(reg_prepare()));
Гость Дата 13.10.2011, 9:35
  не могу понять как правильно прописать слот. суть такая. есть 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();
}


спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 17:24