Название: Сигнал из слота Отправлено: backdoor от Июнь 15, 2013, 15:21 Всем привет! Подскажите в очередной раз такую штуку. Надо из слота одного класса отправить сигнал в слот другого класса, например:
Код: DialogWindow::button_pressed_slot() Код: mainWindow::слот1(вектор *) Покажите, пожалуйста, как реализовать такой connect? Название: Re: Сигнал из слота Отправлено: Figaro от Июнь 15, 2013, 15:25 Код: emit передаем_в_слот1_mainWindow(вектор*); Название: Re: Сигнал из слота Отправлено: backdoor от Июнь 15, 2013, 16:07 сделал, но прога, не запустившись, завершается аварийно, прикладываю содержание файлов, сигнал sendDetals:
addwindow.h Код: namespace Ui { addwindow.cpp Код: #include "addwindow.h" mainwindow.h Код: #include "addwindow.h" mainwindow.cpp Код: #include "mainwindow.h" Название: Re: Сигнал из слота Отправлено: Figaro от Июнь 15, 2013, 16:13 что возвращает connect? либо минимальный компилируемый проект...
Название: Re: Сигнал из слота Отправлено: lit-uriy от Июнь 15, 2013, 16:28 Если данные из диалога нужны по окончании работы с ним, то я бы это вообще иначе сделал:
1) в диалоге предусматриваю функцию (функции), которая вернёт нужные данные 2) в главном окне создаём объект диалога 3) в главном окне связываем штатный сигнал QDialog::accepted() со слотом главного окна (например, некий finishDialog) 4) в указанном слоте читаю данные из диалога с помощью функции п.1 обращаясь к диалогу по указателю, который получу так Код: addWindow *dialog = qobject_cast<addWindow *>(sender()); Название: Re: Сигнал из слота Отправлено: VPS от Июнь 15, 2013, 16:36 Если я правильно понял, то у Вас ошибка вот в этом куске:
Код: MainWindow::MainWindow(QWidget *parent) : Ваша переменная, которую Вы объявили в заголовочном файле не используется, т.к. внутри слота Вы создаёте другую переменную. Но вроде от этого программа не должна падать, а вот слот работать не будет... Название: Re: Сигнал из слота Отправлено: backdoor от Июнь 15, 2013, 16:55 что возвращает connect? либо минимальный компилируемый проект... приложил проект.А именно, в конструкторе при вызове connect, у вас идёт обращение к переменной addw, которую этот метод не видит, т.к. она объявляется в слоте.... чем вообще отличается class *var от class *var=new class;Сделайте переменную addw членом класса... Если данные из диалога нужны по окончании работы с ним, то я бы это вообще иначе сделал: Спасибо, возьму на заметку, но тут уже начал делать окно не от QDialog, а просто от QWidget. пока у меня вообще с ООП туговато и с коннектами никак не разобраться(. в дальнейшем попробую ваш способ.1) в диалоге предусматриваю функцию (функции), которая вернёт нужные данные 2) в главном окне создаём объект диалога 3) в главном окне связываем штатный сигнал QDialog::accepted() со слотом главного окна (например, некий finishDialog) 4) в указанном слоте читаю данные из диалога с помощью функции п.1 обращаясь к диалогу по указателю, который получу так Код: addWindow *dialog = qobject_cast<addWindow *>(sender()); Название: Re: Сигнал из слота Отправлено: kambala от Июнь 15, 2013, 17:15 чем вообще отличается class *var от class *var=new class; первое просто объявляет указатель (в нем будет содержаться мусор, и при попытке что-нибудь сделать с указателем программа, вероятно, крашнется), второе — выделяет память, так что указатель указывает на реальный объект. это базовые знания языка, которые нужно усвоить, а не лезть сразу окошки рисовать.Название: Re: Сигнал из слота Отправлено: Figaro от Июнь 15, 2013, 17:21 Для connect надо указывать существующий объект, а не хрен знает что....
Название: Re: Сигнал из слота Отправлено: lit-uriy от Июнь 15, 2013, 17:47 >>второе — выделяет память
точнее: как и первое, только ещё и выделяет память, создаёт в ней объект и присваивает его адрес указателю второе по другому записывается так: type *var; // как и в первом случае объявляет указатель var = new class; // создаёт динамически объект в памяти и присваивает его адрес указателю Название: Re: Сигнал из слота Отправлено: lit-uriy от Июнь 15, 2013, 17:51 >>но тут уже начал делать окно не от QDialog, а просто от QWidget
читайте это учебное пособие (http://www.doc.crossplatform.ru/qt/4.6.x/tutorials-addressbook.html) от авторов библиотеки (переведены на русский) А лучше начать с самого первого http://www.doc.crossplatform.ru/qt/4.6.x/widgets-tutorial.html Название: Re: Сигнал из слота Отправлено: backdoor от Июнь 15, 2013, 18:00 чем вообще отличается class *var от class *var=new class; это базовые знания языка, которые нужно усвоить, а не лезть сразу окошки рисовать.[/quote] к сожалению зада поставлена независимо от возможностей реализации. Для connect надо указывать существующий объект, а не хрен знает что.... золотые слова))все, разобрался, всем спасибо, учебные пособия буду изучать. Название: Re: Сигнал из слота Отправлено: Igors от Июнь 15, 2013, 18:13 ..это базовые знания языка, которые нужно усвоить, а не лезть сразу окошки рисовать. То да, но что бы вы/мы ни говорили - лезть будут :) Там учить надо, чего-то вникать, а тут неск минут - и вот уже окно! Человека привлекает эффект достигнутого, впечатление быстрого прогресса. Невозможно убедить его в том что это "построено на песке" - ведь он только что "сделал", и результат налицо. Поэтому мне кажется нет никакого смысла тратить время на нотации. С новичками надо общаться поменьше, тем более им и так все ясновсе, разобрался, ну вот и чудненькоНазвание: Re: Сигнал из слота Отправлено: kambala от Июнь 15, 2013, 23:59 всегда есть надежда, что новичок примет подобные слова всерьез (ну или вспомнит когда-нибудь в будущем, что дельный совет-то уже давали), а чиркнуть строчкe-другую не так уж и сложно.
|