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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Где писать обработчики событий (в Qt Creator)  (Прочитано 13518 раз)
catprog
Гость
« : Май 10, 2009, 18:30 »

Где написать мой код который должен выполнится например при нажатии на конкретную кнопку?
Почитал про сигналы, наверно их можно для этого использовать, но кажется они сделаны для другого.
В Qt Creator есть вкладка "Action editor", не пойму как она работает. Добавляю некое событие а место для кода события нигде не появляется.
Записан
MAGrikh
Гость
« Ответ #1 : Май 10, 2009, 18:46 »

Посмотри примеры в которых НЕТ форм созданных в Creator - сразу разберешься что к чему

как пример - у меня в mainwindow.cpp
Код:
void MainWindow::createActions()
{
LoginAct = new QAction(QIcon(":/Images/ico/plus-circle-frame.png"),tr("Log&in"), this);
    LoginAct->setShortcut(tr("Ctrl+I"));
    LoginAct->setStatusTip(tr("Login account"));
    connect(LoginAct, SIGNAL(triggered()), this, SLOT(LoginAccount()));
}

....

void MainWindow::LogoutAccount()
{
    statusBar()->showMessage(tr("Invoked Account|Logout")); // тут обработка твоего события, у меня пока что тупо сообщение в статус баре рисует
}

Ну и не забудь все это в mainwindow.h прописать




Записан
catprog
Гость
« Ответ #2 : Май 10, 2009, 19:09 »

Посмотри примеры в которых НЕТ форм созданных в Creator - сразу разберешься что к чему
1) Где их брать такие примеры Непонимающий

как пример - у меня в mainwindow.cpp
Код:
void MainWindow::createActions()
{
LoginAct = new QAction(QIcon(":/Images/ico/plus-circle-frame.png"),tr("Log&in"), this);
....
В mainwindow.cpp у меня нет createActions().
Класс QAction это стандартный или Ваш?
connect(LoginAct, SIGNAL(triggered()), this, SLOT(LoginAccount())); - это ведь привязка сигнала к слоту
или без сигналов нельзя обойтись при обработке событий?
Записан
Dodge
Гость
« Ответ #3 : Май 10, 2009, 19:24 »

1) Где их брать такие примеры Непонимающий
QTDIR/examples

Вообще, прежде чем браться за работу, рекомендую ознакомиться с документацией  Улыбающийся
Записан
Dodge
Гость
« Ответ #4 : Май 10, 2009, 19:27 »

Кстати, в Qt есть небольшой "навигатор" по примерам, называется qtdemo. Находится эта программа в QTDIR/bin/qtdemo
Записан
catprog
Гость
« Ответ #5 : Май 10, 2009, 19:39 »

Кстати, в Qt есть небольшой "навигатор" по примерам, называется qtdemo. Находится эта программа в QTDIR/bin/qtdemo
Не знаю почему но он у меня вот так выглядит:
Записан
Dodge
Гость
« Ответ #6 : Май 10, 2009, 20:24 »

Странно.

установлены ли драйвера для видеокарточки?
Записан
catprog
Гость
« Ответ #7 : Май 10, 2009, 20:57 »

Странно.

установлены ли драйвера для видеокарточки?
Угу, странная у меня карта и дрова к ней, может под вистой она и нормально работает но с ХР туго.

Вернемся к нашим кодам. Для теста событий(сигналов) пытаюсь написать простую форму вручную. Хочу чтобы было на форме кнопка и текст поле, жмем на кнопку в текстовое поле пишется "хелло". Вот что я в примерах накопал и накрутил:
Код:
myButton = new QPushButton;
myButton->resize(100,30);
this->resize(500,200);
setCentralWidget(myButton);
Кнопка тут получается на всю форму 500х200, а если написать setCentralWidget(this); то прога виснет, а если строку вообще не писать то получается две формы. Как мне быть?

О, допер, вот так писать надо
Код:
myButton = new QPushButton;
myEdit = new QLineEdit;
myEdit->resize(100,50);
myButton->resize(100,30);
   
myEdit->setParent(this);
   
myButton->setParent(this);

this->resize(500,200);
ща буду сигналы  тестить. А без сигналов обработать событие точно нельзя?
« Последнее редактирование: Май 10, 2009, 21:16 от catprog » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Май 10, 2009, 21:53 »

есть сигналы/слоты, есть события (QEvent). Грубо говоря сигналы/слоты используются, когда событие происходит редко - пользователь нажал кнопку, выделил фокус в строке ввода. События - когда часто - пользователь подвинул мышку, нажал кнопку на клаве. Такие вещи ловятся либо при помощи наследования и перегрузки вируальных функций (void keyPressEvent(QKeyEvent * e)Подмигивающий либо установкой обработчика событий на экземпляр класса. Всё это описано в книжке того же Шлее.
Как и твой вопрос про 2 формы - если у виджета не установлен родительский виджет, то он создается в отдельной форме, иначе - на родителе. Побочным эффектом setMainWidget() как раз является установка родителя.
а да, видел такой баг у друга в висте... причем сам не видел ни на ХР (3 системы), ни на 2008 сервере
« Последнее редактирование: Май 10, 2009, 21:54 от Авварон » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Май 10, 2009, 22:12 »

Лучше всё таки не примеры на этом этапе изучать, а учебное пособие, от версии Q4.4.3 и ниже, т.к. его зачем-то прибили в версии 4.5.
Тем более, что оно частично переведено на русский (тык).
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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