Russian Qt Forum
Сентябрь 23, 2024, 02:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как настроить главное окно приложения на прием сигналов от дочерних форм.  (Прочитано 4432 раз)
myr
Гость
« : Сентябрь 15, 2009, 12:46 »

Есть главная форма Form1.
Создаем в ней немодальную форму Dialog1.(Dialog1 = new QDialog(this)Подмигивающий
Запускаем Dialog1.
В форме Dialog1 создаем сигнал signal.
В главной  форме  Form1 создаем слот  void Slot();
В конструкторе главной формы Form1 подключаем
connect(Dialog1,SIGNAL(signal),this,SLOT(slot()));

В форме Dialog1 emit signal(); 
Ничего  не происходит.
Как настроить главное окно проиложения на прием сигналов от дочерних форм.
Спасибо.

 

Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Сентябрь 15, 2009, 12:50 »

код в студию
Записан

ArchLinux x86_64 / Win10 64 bit
myr
Гость
« Ответ #2 : Сентябрь 15, 2009, 13:14 »

Код
C++ (Qt)
class Form0 : public QMainWindow
{
public:
   frmTree *dlgTree;
}
 
class frmTree : public QDialog
{
 
signals:
   void signal(int pu_id);
}
 
void  frmTree::Func(int t)
{
        emit signal(pu_id_int);  
}
 
 
void  Form0::init()
{
 dlgTree = new frmTree(this);
 dlgTree->setModal(false);
}
 
class Form1 : public Form0
{
public :
 Form1(QWidget *parent = 0, const char *name = 0,  WFlags fl = WType_TopLevel);
public slots:
   void Slot(int pu_id);
 
};
 
Form1::Form1(QWidget *parent, const char *name, WFlags fl) :Form0(parent, name, fl)
    connect(dlgTree, SIGNAL(signal(int)), this, SLOT(Slot(int)));
}
 
 
void  Form1::Slot(int pu_id){
        QMessageBox::warning(0, "sdfs","sdfsdkfj");
}
 
 
 
int main( int argc, char ** argv )
{
         QApplication a( argc, argv );
         Form1 *myForm = new Form1;
         myForm->show();
         a.setMainWidget( myForm );
          int res = a.exec();
 
}


  
 Шокированный
« Последнее редактирование: Сентябрь 21, 2009, 13:29 от pastor » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Сентябрь 15, 2009, 13:46 »

а где вызывается метод: void  Form0::init() ??
Записан

ArchLinux x86_64 / Win10 64 bit
myr
Гость
« Ответ #4 : Сентябрь 15, 2009, 14:03 »

Это конструктор формы.
Вызываеться автоматически.
Диалоговое окно dlgTree  создаеться и открываеться.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Сентябрь 15, 2009, 14:08 »

Цитировать
Это конструктор формы.
Ась? О_О
Записан

ArchLinux x86_64 / Win10 64 bit
myr
Гость
« Ответ #6 : Сентябрь 15, 2009, 15:17 »

У нас штука такая Конструктор под МСВС. Связянный Qt designer и develop.ъ
При генерации cpp из ui.h в конструктор класса Form0,  вставляется init();

Как дочерняя форма  может послать сигнал родителю?
Записан
Lostinnet
Гость
« Ответ #7 : Сентябрь 21, 2009, 12:27 »

а разве не надо добавить в класс frmTree  и Form1  макрос Q_OBJECT
Записан
Alp
Гость
« Ответ #8 : Сентябрь 22, 2009, 21:00 »

а разве не надо добавить в класс frmTree  и Form1  макрос Q_OBJECT
Правильно. И вызвать qmake для правильной перегенерации moc_***.cpp
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 23.