crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 0:08