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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Обработка сигнала в слоте  (Прочитано 7584 раз)
labview
Гость
« : Июль 30, 2010, 14:21 »

Привет!

Пытаюсь написать "Здравствуй мир" в QtCreator. Создал слот с помощью ПКМ, в cpp-файле появилась пустая вызываемая функция для обработки сигнала. Мне бы хотелось добавить в QString слово "Hello" и выдать его во второй LineEdit.

При компиляции выдаёт ошибку, что Message не декларирован в этой секции. Как мне сделать LineEdit Message доступным в этой функции?

Спасибо, labview

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_YourName_textEdited(QString )
{
    Message.SetText(QString);
}
Записан
crossly
Гость
« Ответ #1 : Июль 30, 2010, 14:23 »

а что есть Message ??
Записан
labview
Гость
« Ответ #2 : Июль 30, 2010, 14:24 »

а что есть Message ??

Это второй LineEdit, в который я хочу выдать сообщение "Hello имя!".
Записан
crossly
Гость
« Ответ #3 : Июль 30, 2010, 14:27 »

Код:
void MainWindow::on_YourName_textEdited(const QString &text)
{
    text.append(" Hello");
    ui->Message->setText(text);
}
Записан
labview
Гость
« Ответ #4 : Июль 30, 2010, 15:01 »

Сделал так, работает:

Код:
void MainWindow::on_YourName_textEdited(const QString &text)
{
    ui->Message->setText("Hello " + text);
}

Возник такой вопрос. Где определено какой именно сигнал используется в слоте и кто является отправителем сигнала? Если я например хочу поменять тип сигнала на TextChanged вместо TextEdited, что мне нужно для этого сделать? Ведь название слота это только название или я ошибаюсь?

Спасибо
Записан
crossly
Гость
« Ответ #5 : Июль 30, 2010, 15:04 »

в этом месте отрываем документацию и начинаем курить ее на предмет механизма сигнал/слот....
Записан
labview
Гость
« Ответ #6 : Июль 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.
Пожалуста ткните носом чайника в нужную страницу в документации.
Записан
crossly
Гость
« Ответ #7 : Июль 30, 2010, 15:16 »

а ты попробуй забыть на денек о дизайнере... и по пробуй сделать все без него... а когда снизойдет на тебя.... тогда можешь и вспомнить о нем...
Записан
labview
Гость
« Ответ #8 : Июль 30, 2010, 15:24 »

Я бы с удовольствием, но мне кажется дизайнер сильно облегчает работу с пользовательским интерфейсом, т.к. не нужно парить свой мозг различными чайлдами, лейаутами, размерами и позиционированием элементов. Зачем делать сложно, когда можно сделать легко.

Но это моё личное мнение, я не собираюсь спорить по этому поводу с профи.

Так дайте мне пожалуйста инфу как изменить тип и отправителя сигнала в созданном слоте. Спасибо.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Июль 30, 2010, 15:28 »

labview, делай всё в коде.
Дизайнер - помощник для тех, кто уже понимает, что делает. А для новичков - враг.
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Июль 30, 2010, 15:31 »

Читай это и это
Записан

Юра.
crossly
Гость
« Ответ #11 : Июль 30, 2010, 15:39 »

Я бы с удовольствием, но мне кажется дизайнер сильно облегчает работу с пользовательским интерфейсом, т.к. не нужно парить свой мозг различными чайлдами, лейаутами, размерами и позиционированием элементов. Зачем делать сложно, когда можно сделать легко.

Но это моё личное мнение, я не собираюсь спорить по этому поводу с профи.

Так дайте мне пожалуйста инфу как изменить тип и отправителя сигнала в созданном слоте. Спасибо.
я не предлагаю забросить дизайнер вообще... я предлагаю разобраться что к чему.... а когда придет понимание тогда пользуйтесь на здоровье... 
Записан
labview
Гость
« Ответ #12 : Июль 30, 2010, 16:05 »

Вот урок по которому я делал программу:
http://netbeans.org/kb/docs/cnd/qt-applications.html

В этом уроке само окно и два LineEdit элемента создаются в дизайнере, а слот создаётся без дизайнера. Но я так и не понимаю где указана привязка элемента-отправителя к слоту. А так же тип сигнала это textChanged, это ли и есть название слота?

Почитал немного о сигналах и слотах, но так и не врубился. Сори.

Получается слот привязан не к элементу LineEdit, а к классу MainWindow, который как то связан с LineEdit. Всё это как то происходит через moc. С типом сигнала так же не смог разобраться.

Ну что же, жаль, придётся звонить брату и спрашивать у него  В замешательстве
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Июль 30, 2010, 16:12 »

В Qt предусмотрена довольно подлая возможность под названием "автосоединение" сделана для новичков, по аналогии с обработчиком событий в ВизуалБасике и Борланде.
Категорически мешающая пониманию сигналов/слотов.

У тролей был длинноватый, но очень хороший учебник в предыдущих версиях, теперь они его убрали из документации.
Смотри его здесь (на русском).
Записан

Юра.
crossly
Гость
« Ответ #14 : Июль 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 (на лицо не понимание с++)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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