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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.3.0-win] Проблема с автоподключением слотов  (Прочитано 7133 раз)
Icoz
Гость
« : Июль 27, 2007, 08:35 »

В дизайнере делаю на основе MainWindow форму с 1 менюшкой (File->Exit) и 1 кнопкой (btnExit).
Потом прописываю в классе(выделено жирным):
Код:
class qt_test : public QMainWindow
{
    Q_OBJECT

public:
    qt_test(QWidget *parent = 0);
    ~qt_test();

private:
    Ui::qt_testClass ui;
[b]private slots:
void on_btnExit_clicked()  {close();}
void on_actionExit_toggled(bool checked) {close();}[/b]
};

Запускаю. Кнопка срабатывает, а actionExit - нет! Грустный Что я не так сделал и что делать? Руками писать коннект? Пишу в qt_test:
Код:
qt_test::qt_test(QWidget *parent)
    : QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.actionExit,SIGNAL(toggled(bool)),this,SLOT(on_actionExit_toggled(bool)));
}

Та же ситуация - кнопка пашет, менюшка - нет!
Сами попробуйте - дело двух минут!

добавлено спустя 21 минуту:

 Так. Проблема решена. Моя ошибка. Надо вместо toggled юзать activated! Улыбающийся
Чтобы юзать toggled надо установить chackable в true.

добавлено спустя 8 часов:

 Нет! Поднимаю вопрос заново. На другом компе тот же код - не работает!
on_actionExit_activated() не подключается!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июль 27, 2007, 10:24 »

Используй сигнал triggered() для QAction

Код:

connect(ui.actionExit,SIGNAL(triggered()),this,SLOT(close()));


Код:

on_actionExit_triggered() {...}
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Icoz
Гость
« Ответ #2 : Июль 27, 2007, 10:49 »

Цитата: "pastor"
Используй сигнал triggered() для QAction

Код:

connect(ui.actionExit,SIGNAL(triggered()),this,SLOT(close()));


Код:

on_actionExit_triggered() {...}

Ok. Только тогда почему на одной машине activated работает, а на другой - НЕТ?

добавлено спустя 3 минуты:

 Ты будешь смеяться! Но на этой машине и ЭТО не пашет!!! Улыбающийся
Вообще автоподключение слотов не работает!

добавлено спустя 3 минуты:

 Весело!
Код:
connect(ui.actionExit,SIGNAL(triggred()),this,SLOT(close()));

Тоже не срабатывает! Грустный Блин, да что за дела???
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июль 27, 2007, 10:54 »

Попробуй так организовать свой класс. имхо проблема в этом, но это тока имхо

Код:

class qt_test : public QMainWindow, private Ui::qt_testClass
{
....
};
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Icoz
Гость
« Ответ #4 : Июль 27, 2007, 13:19 »

Цитата: "pastor"
Попробуй так организовать свой класс. имхо проблема в этом, но это тока имхо

Код:

class qt_test : public QMainWindow, private Ui::qt_testClass
{
....
};

Самое смешное, это прервое, что я попробовал, заглянув в книжку по qt4
И все равно не пашет!
Записан
SABROG
Гость
« Ответ #5 : Июль 27, 2007, 13:35 »

Дядь Вов, опечатка - triggred и triggered...

Код:

connect(ui.actionExit,SIGNAL(triggred()),this,SLOT(close()));
Записан
Icoz
Гость
« Ответ #6 : Июль 27, 2007, 13:43 »

Код:

on_actionExit_triggered() {...}

Ну здесь-то правильно? А все равно не пашет. Про коннект ща проверить не могу. Я далеко ща от того компа. Но доберусь - попробую...
Записан
SABROG
Гость
« Ответ #7 : Июль 27, 2007, 14:06 »

Сделай проще. В дизайнере открой Signal / Slot editor и проставь там необходимые действия, раз надо всего-лишь закрыть окно.
Записан
Icoz
Гость
« Ответ #8 : Июль 27, 2007, 14:24 »

Цитата: "SABROG"
Сделай проще. В дизайнере открой Signal / Slot editor и проставь там необходимые действия, раз надо всего-лишь закрыть окно.

делаю в eclipse c qt-ecplise-intergator. Там нет этого редактора. (либо я его еще не нашел, что вряд ли...)
Записан
SABROG
Гость
« Ответ #9 : Июль 27, 2007, 14:40 »

Пройди обучение в Cheat Sheet's, советую.

Цитировать

что вряд ли...

Window->Show View->Other->Qt->Qt C++ Signal Slot Editor

(Qt Eclipse Integration Release Candidat 1 (RC1))
Записан
Icoz
Гость
« Ответ #10 : Июль 27, 2007, 14:43 »

Цитата: "SABROG"
Пройди обучение в Cheat Sheet's, советую.

Цитировать

что вряд ли...

Windows->Show View->Other->Qt->Qt C++ Signal Slot Editor

(Qt Eclipse Integration Release Candidat 1 (RC1))

О! Вот это гут! Благодарствую.
Правда меня смущает тот факт, что на одном компе этот код пашет(win2000, qt4.3.0), а на другом(xp, qt4.3.0) - нет!
Записан
bigirbis
Гость
« Ответ #11 : Июль 27, 2007, 15:04 »

Цитировать
делаю в eclipse c qt-ecplise-intergator. Там нет этого редактора. (либо я его еще не нашел, что вряд ли...)

$(QTDIR)\bin\designer.exe
Он есть всегда...
Записан
Icoz
Гость
« Ответ #12 : Июль 27, 2007, 20:48 »

Цитата: "bigirbis"
Цитировать
делаю в eclipse c qt-ecplise-intergator. Там нет этого редактора. (либо я его еще не нашел, что вряд ли...)

$(QTDIR)\bin\designer.exe
Он есть всегда...

ну а зачем тогда ide вообще нужно?
И почему, кстати, trolltech не доведет designer до состояния IDE?
Там осталось-то... Приделать компиляцию, отладку и все дела! Редактор встроенный там есть...

добавлено спустя 5 часов:

 
Цитата: "Icoz"
Код:

on_actionExit_triggered() {...}

Ну здесь-то правильно? А все равно не пашет. Про коннект ща проверить не могу. Я далеко ща от того компа. Но доберусь - попробую...

Все оказалось намного проще! Я забыл на том компе написать заветное слово "slots"! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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