Russian Qt Forum

Qt => Вопросы новичков => Тема начата: LEO от Август 09, 2012, 09:39



Название: Взаимодействие окон созданных в дизайнере
Отправлено: LEO от Август 09, 2012, 09:39
Вопрос в следующем, есть QWidget-главное окно в нем tableview соединенный с БД и несколько кнопок, все создано через designer, по нажатию одной  из кнопок вылетает форма Qdialog, она тоже создана через designer, непонятно как связать окно с формой для прямого взаимодействия с таблицей, т.е. заносим данные в форму диалога, а они передаются в форму виджета, в программировании новичок.
заранее благодарен 


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: mutineer от Август 09, 2012, 10:09
Для главного окна и для диалога у тебя есть классы. Связываешь объекты этих классов между собой через сигнал-слот


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: LEO от Август 09, 2012, 10:21
ну да у главного окна class Widget, у диалога class Dialog, не совсем понятно где и как они свзываются, если есть наглядный пример , буду благодарен.


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: mutineer от Август 09, 2012, 10:22
http://www.prog.org.ru/topic_22634_0.html


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: LEO от Август 09, 2012, 12:44
в общем сделал по примеру написанного, но пишет нет соединения
Object::connect: No such signal Widget::needToChangeText(QString)
для наглядности приложил  проект.
вообще возникают определенные сомнения что задуманное получится.


Название: Re: Взаимодействие окон созданных в дизайне&#
Отправлено: mutineer от Август 09, 2012, 12:52
объявлен у тебя сигнал без параметра:
Код:
signals: void needToChangeText();

а подключаться пытаешься к сигналу с параметром
Код:
QObject::connect(&window, SIGNAL(needToChangeText(QString)), &dialog, SLOT(changeText(QString)));

а слота changeText(QString) у диалога вообще нет


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: LEO от Август 09, 2012, 13:52
спасибо, однако после добавления  в dialog.h
private slots:
    void changeText(QString);
///////////////////////////////////
исправления signals: void needToChangeText(QString);

выдает ошибку moc_dialog.cpp:-1: ошибка: undefined reference to `Dialog::changeText(QString)'
                     -1: ошибка: collect2: ld returned 1 exit status



Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: kambala от Август 09, 2012, 13:55
а реализацию метода void changeText(QString) ты написал? хотя бы элементарно void changeText(QString) {}


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: LEO от Август 09, 2012, 14:23
Спасибо, заработоло при добавлении реализации, все ок, но вот не пойму самого механизма связки двух Ui , мне надо обращаться к примеру в файле диалога к ui файлу виджета, чтобы достучаться до tableview который там висит, грубо говоря ui->lineedit->setText(ui->tableview и т.д.), tableview и lineedit находятся на разных формах..


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: mutineer от Август 09, 2012, 14:42
Обращаться надо не напрямую, а через сигнал-слот
Тебе бы подучить С++ и почитать по сигнал-слот в Qt, может тогда станет понятнее...


Название: Re: Взаимодействие окон созданных в дизайнере
Отправлено: LEO от Август 09, 2012, 14:47
спасибо, пойду читать.