Название: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 14:21 Привет!
Пытаюсь написать "Здравствуй мир" в QtCreator. Создал слот с помощью ПКМ, в cpp-файле появилась пустая вызываемая функция для обработки сигнала. Мне бы хотелось добавить в QString слово "Hello" и выдать его во второй LineEdit. При компиляции выдаёт ошибку, что Message не декларирован в этой секции. Как мне сделать LineEdit Message доступным в этой функции? Спасибо, labview Код: #include "mainwindow.h" Название: Re: Обработка сигнала в слоте Отправлено: crossly от Июль 30, 2010, 14:23 а что есть Message ??
Название: Re: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 14:24 а что есть Message ?? Это второй LineEdit, в который я хочу выдать сообщение "Hello имя!". Название: Re: Обработка сигнала в слоте Отправлено: crossly от Июль 30, 2010, 14:27 Код: void MainWindow::on_YourName_textEdited(const QString &text) Название: Re: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 15:01 Сделал так, работает:
Код: void MainWindow::on_YourName_textEdited(const QString &text) Возник такой вопрос. Где определено какой именно сигнал используется в слоте и кто является отправителем сигнала? Если я например хочу поменять тип сигнала на TextChanged вместо TextEdited, что мне нужно для этого сделать? Ведь название слота это только название или я ошибаюсь? Спасибо Название: Re: Обработка сигнала в слоте Отправлено: crossly от Июль 30, 2010, 15:04 в этом месте отрываем документацию и начинаем курить ее на предмет механизма сигнал/слот....
Название: Re: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 15:13 Да, я нашёл в документации как редактировать слот в Qt дизайнере, но тот слот, который я создал ручками не имеется в списке слотов в дизайнере, поэтому я немогу редактировать тип и отправителя сигнала.
Цитировать The Signal/Slot Editor Пожалуста ткните носом чайника в нужную страницу в документации.The signal and slot used in a connection can be changed after it has been set up. When a connection is configured, it becomes visible in Qt Designer's signal and slot editor where it can be further edited. You can also edit signal/slot connections by double-clicking on the connection path or one of its labels to display the Connection Dialog. Название: Re: Обработка сигнала в слоте Отправлено: crossly от Июль 30, 2010, 15:16 а ты попробуй забыть на денек о дизайнере... и по пробуй сделать все без него... а когда снизойдет на тебя.... тогда можешь и вспомнить о нем...
Название: Re: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 15:24 Я бы с удовольствием, но мне кажется дизайнер сильно облегчает работу с пользовательским интерфейсом, т.к. не нужно парить свой мозг различными чайлдами, лейаутами, размерами и позиционированием элементов. Зачем делать сложно, когда можно сделать легко.
Но это моё личное мнение, я не собираюсь спорить по этому поводу с профи. Так дайте мне пожалуйста инфу как изменить тип и отправителя сигнала в созданном слоте. Спасибо. Название: Re: Обработка сигнала в слоте Отправлено: lit-uriy от Июль 30, 2010, 15:28 labview, делай всё в коде.
Дизайнер - помощник для тех, кто уже понимает, что делает. А для новичков - враг. Название: Re: Обработка сигнала в слоте Отправлено: lit-uriy от Июль 30, 2010, 15:31 Читай это (http://doc.crossplatform.ru/qt/4.6.x/object.html) и это (http://doc.crossplatform.ru/qt/4.6.x/signalsandslots.html)
Название: Re: Обработка сигнала в слоте Отправлено: crossly от Июль 30, 2010, 15:39 Я бы с удовольствием, но мне кажется дизайнер сильно облегчает работу с пользовательским интерфейсом, т.к. не нужно парить свой мозг различными чайлдами, лейаутами, размерами и позиционированием элементов. Зачем делать сложно, когда можно сделать легко. я не предлагаю забросить дизайнер вообще... я предлагаю разобраться что к чему.... а когда придет понимание тогда пользуйтесь на здоровье... Но это моё личное мнение, я не собираюсь спорить по этому поводу с профи. Так дайте мне пожалуйста инфу как изменить тип и отправителя сигнала в созданном слоте. Спасибо. Название: Re: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 16:05 Вот урок по которому я делал программу:
http://netbeans.org/kb/docs/cnd/qt-applications.html В этом уроке само окно и два LineEdit элемента создаются в дизайнере, а слот создаётся без дизайнера. Но я так и не понимаю где указана привязка элемента-отправителя к слоту. А так же тип сигнала это textChanged, это ли и есть название слота? Почитал немного о сигналах и слотах, но так и не врубился. Сори. Получается слот привязан не к элементу LineEdit, а к классу MainWindow, который как то связан с LineEdit. Всё это как то происходит через moc. С типом сигнала так же не смог разобраться. Ну что же, жаль, придётся звонить брату и спрашивать у него :-\ Название: Re: Обработка сигнала в слоте Отправлено: lit-uriy от Июль 30, 2010, 16:12 В Qt предусмотрена довольно подлая возможность под названием "автосоединение" сделана для новичков, по аналогии с обработчиком событий в ВизуалБасике и Борланде.
Категорически мешающая пониманию сигналов/слотов. У тролей был длинноватый, но очень хороший учебник в предыдущих версиях, теперь они его убрали из документации. Смотри его здесь (http://doc.crossplatform.ru/qt/4.4.3/tutorials-tutorial.html) (на русском). Название: Re: Обработка сигнала в слоте Отправлено: crossly от Июль 30, 2010, 16:19 >>В этом уроке само окно и два LineEdit элемента создаются в дизайнере, а слот создаётся без дизайнера.
Дизайнер предназначен только для создания ГУИ и не предназначен для создания слотов... в нем можно соединить только существующие сигналы/слоты библиотеки.... >>Но я так и не понимаю где указана привязка элемента-отправителя к слоту. Код: connect(widget.nameEdit,SIGNAL(textChanged(const QString &)),this,SLOT(textChanged(const QString &))); >>А так же тип сигнала это textChanged, это ли и есть название слота? в этом примере сигнал и слот имеют одинаковые имена... Код: SIGNAL(textChanged(const QString &)) - здесь сигнал, SLOT(textChanged(const QString &)) - здесь слот >>Получается слот привязан не к элементу LineEdit, а к классу MainWindow, который как то связан с LineEdit. слот это метод класса MainWindow (на лицо не понимание с++) Название: Re: Обработка сигнала в слоте Отправлено: labview от Июль 30, 2010, 16:26 Всё, теперь врубился. Функция connect всё делает. Спасибо, думаю разобрался.
Да, C++ у меня хромает, я уже прилично долго и профессионально программирую на другом языке программирования, где для меня всё понятно. Могу и учу других людей. Название: Re: Обработка сигнала в слоте Отправлено: labview от Август 05, 2010, 21:55 Привет ещё разок!
У меня есть виджет SettingsWidget с сигналом open. Этот виджет является паблик мембером виджета MainWidget, который и является основным в программе. Так же у меня есть SerialThread типа QThread, который известен в main. Могу ли я связать сигнал подвиджета SettingsWidget со слотом SerialThread? Или мне нужно обязательно связать сигнал подвиджета со слотом MainWidget, а потом связать сигнал MainWidget со слотом SerialThread? Спасибо, надеюсь понятно обьяснил ;) Название: Re: Обработка сигнала в слоте Отправлено: SimpleSunny от Август 05, 2010, 21:59 Можете
connect(mainWindow->settingsWidget, SIGNAL(open()), serialThread, SLOT(slot())); Название: Re: Обработка сигнала в слоте Отправлено: labview от Август 05, 2010, 22:02 Клёво, получилось. Ждите скоро мою первую прогу.
|