Russian Qt Forum

Qt => Общие вопросы => Тема начата: Tirex от Март 20, 2006, 20:21



Название: не работают слоты ?
Отправлено: Tirex от Март 20, 2006, 20:21
не работают почему - то слоты  :
в конструкторе
когда делаю так
        a = new QAction(QIcon(":/images/configure.png"), tr("&options"), this);
        a->setShortcut(Qt::CTRL + Qt::Key_O);
        connect(a, SIGNAL(triggered()), this, SLOT(Quit()));
        tb->addAction(a);
--
работает
--
а так не реагирует:
connect(this,(SIGNAL(destroy())),this,SLOT(Quit()));

connect(dialog,SIGNAL(close()),this,SLOT(newGame()));


class ConfigDialog : public QDialog
{
    Q_OBJECT
 .....
}

 в чем причина ?


Название: не работают слоты ?
Отправлено: Hordi от Март 20, 2006, 21:26
Сигнал называется destroyed()


Название: не работают слоты ?
Отправлено: Tirex от Март 21, 2006, 05:10
изменил на destrоyed все равно реакции ноль.


Название: не работают слоты ?
Отправлено: Admin от Март 21, 2006, 08:21
попробуй еще скобки убрать
connect(this,(SIGNAL(destroy())),this,SLOT(Quit()));
на
connect(this,SIGNAL(destroy()),this,SLOT(Quit()));

и вообще смысл этой конструкции не очень понятен
зачем для QDialog надо такое делать?


Название: не работают слоты ?
Отправлено: Hordi от Март 21, 2006, 10:11
Admin прав. Лишние скобки однозначно. Но сигнала destroy и close у QDialog нет, есть похожие слоты.


Название: не работают слоты ?
Отправлено: Tirex от Март 21, 2006, 13:29
Цитировать
и вообще смысл этой конструкции не очень понятен
зачем для QDialog надо такое делать?

хочу сделать так:
connect(dialog,SIGNAL(close()),this,SLOT(dialogQuit( )));
чтобы при выходе записать все настройки высталвенные в QDIalog


Цитировать
Но сигнала destroy и close у QDialog нет, есть похожие слоты.

кажись понял свою ошибку, наверное надо вызывать что-то из этого:

void accepted ()
void finished ( int result )
void rejected ()


Название: не работают слоты ?
Отправлено: Hordi от Март 21, 2006, 13:35
Если диалог вызывается через exec, то проверяешь результат и все.
типа:

QDialog d(...);
if(QDialog::Accepted==d.exec()){

}


Название: не работают слоты ?
Отправлено: Tirex от Март 21, 2006, 13:52
а как установить accepted ?

так правильно будет
 в QDialog:

connect(closeButton, SIGNAL(clicked()), this, SLOT(done(1)));


Название: не работают слоты ?
Отправлено: Hordi от Март 21, 2006, 14:28
нет, правильно так

connect(yesButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(noButton, SIGNAL(clicked()), this, SLOT(reject()));

Теперь дальше:
Параметры сигнала и слота должны ОБЯЗАТЕЛЬНО совпадать. Имена переменных в них писать нельзя.


Название: не работают слоты ?
Отправлено: Tirex от Март 21, 2006, 14:32
но я могу объявить слот accept() и дописать в нем типа присвоение перменным опредленного значения и т.д. ?


Название: не работают слоты ?
Отправлено: Hordi от Март 21, 2006, 14:48
Да, эта функция виртуальная

добавлено спустя 58 секунд:

 Только родной QDialog::accept() вызвать не забудь


Название: не работают слоты ?
Отправлено: BaltikS от Март 21, 2006, 15:00
Tirex, друг, а не проще тебе книгу Бланшета начать читать... Там всё написано шаг за шагом!


Название: не работают слоты ?
Отправлено: Tirex от Март 22, 2006, 09:03
2 Hordi и Admin
cпасибо за помощь

2 BaltikS
и совет!


Название: не работают слоты ?
Отправлено: crocus от Сентябрь 25, 2006, 13:09
Опять же чтоб не создавать новую тему:
есть список с мультиселектом и есть у него сигнал activated( const QModelIndex & index) при клике по строкам списка происходит либо селект, либо деселект так вот в Qt 4.1.4 все работало ок, а в Qt 4.2.0-tp как то криво, так вот при клике по списку кроме селект/деселект еще некая переменная получает значение
делал так
Код:

connect( uii.listRegion, SIGNAL( activated ( QModelIndex ) ),
this, SLOT( listRegion_activated ( QModelIndex ) ) );

и не работает- хотя должно, а вот так работает
Код:

connect( uii.listStreet->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ),
this, SLOT( on_listStreet_activated () ) );

но как сказал выше криво т.е. при первом клике элемент выделяется а дальше нефига-деселект не работает.
Какие предположения???