Russian Qt Forum

Qt => Общие вопросы => Тема начата: NoNameManah от Ноябрь 28, 2005, 14:37



Название: setText
Отправлено: NoNameManah от Ноябрь 28, 2005, 14:37
Ребят, привет. Возникла такая проблема.
Пишу:
...
QLineEdit *edit=new QLineEdit();
...
...
QObject::connect(button,SIGNAL(clicked()),edit,SLOT(setText("HI")));
...
...

Когда компилю прогу, то выдается ошибка:
'setText' undeclared (first use this function)

Че за беда. Ведь этот слот есть в QLineEdit. :?: [/u]


Название: setText
Отправлено: Racheengel от Ноябрь 28, 2005, 16:42
QObject::connect(button,SIGNAL(clicked()),edit,SLOT(setText("HI")));

Так низя писать. Во-первых то, что в SLOT(), должно быть объявлено как слот (а не как метод). Во-вторых, очень желательно, чтобы параметры слота и сигнала совпадали :)

Т.е. тебе надо сделать в проге слот типа

class MyClass : public QObject
{
  Q_ONJECT
...
public slots:
  void onButtonClicked()
...
}

приконнектить его как

QObject::connect(button,SIGNAL(clicked()),MyClass_object,SLOT(onButtonClicked()));

а потом его имплементить:

void MyClass::onButtonClicked()
{
setText("HI")
}


Название: setText
Отправлено: NoNameManah от Ноябрь 29, 2005, 09:13
Так вот именно setText не может найти. Т. е. в заголовочном файле qlineedit.h есть этот слот, а компилятор говорит, что его там нет.


Название: setText
Отправлено: Racheengel от Ноябрь 29, 2005, 13:40
а Кутя какая?


Название: setText
Отправлено: NoNameManah от Ноябрь 29, 2005, 13:49
Третья кутя.


Название: setText
Отправлено: Racheengel от Ноябрь 29, 2005, 14:09
ну а конкретно? 3.1.1 или там 3.3.5 ?


Название: setText
Отправлено: NoNameManah от Ноябрь 29, 2005, 14:19
3.3.4-11


Название: setText
Отправлено: Dendy от Ноябрь 29, 2005, 22:12
:D  Ууууух! Когда то и я натыкался на ети вилы!
Об'ясняю.

Как бы ни было похоже то, что написано внутри SIGNAL() и SLOT() на методы - ето не методы. Ето сигнатура метода. Другими словами ето информация какой именносигнал соединить с каким именно слотом, ибо последние могут быть перегруженными. Другая немаловажная особенность - безопастность кода, чтобы слот не принял int в то время как сигнал испускает QString. Короче говоря: ето информация для ПОИСКА нужного метода, а не сам метод с параметрами. Параметры в слот попадают только из сигнала. Так что советую перечить пример Racheengel'а, ибо он показывает абсолютно правильный способ решения задачи.

Другой (более правильный) способ - использовать класс QSignalMapper. Специально для такого случая как у тебя он и разработан.

 :wink: