Russian Qt Forum

Qt => Общие вопросы => Тема начата: catprog от Май 10, 2009, 18:30



Название: Где писать обработчики событий (в Qt Creator)
Отправлено: catprog от Май 10, 2009, 18:30
Где написать мой код который должен выполнится например при нажатии на конкретную кнопку?
Почитал про сигналы, наверно их можно для этого использовать, но кажется они сделаны для другого.
В Qt Creator есть вкладка "Action editor", не пойму как она работает. Добавляю некое событие а место для кода события нигде не появляется.


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: MAGrikh от Май 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 прописать






Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: catprog от Май 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())); - это ведь привязка сигнала к слоту
или без сигналов нельзя обойтись при обработке событий?


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: Dodge от Май 10, 2009, 19:24
1) Где их брать такие примеры ???
QTDIR/examples

Вообще, прежде чем браться за работу, рекомендую ознакомиться с документацией  :)


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: Dodge от Май 10, 2009, 19:27
Кстати, в Qt есть небольшой "навигатор" по примерам, называется qtdemo. Находится эта программа в QTDIR/bin/qtdemo


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: catprog от Май 10, 2009, 19:39
Кстати, в Qt есть небольшой "навигатор" по примерам, называется qtdemo. Находится эта программа в QTDIR/bin/qtdemo
Не знаю почему но он у меня вот так выглядит:


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: Dodge от Май 10, 2009, 20:24
Странно.

установлены ли драйвера для видеокарточки?


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: catprog от Май 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);
ща буду сигналы  тестить. А без сигналов обработать событие точно нельзя?


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


Название: Re: Где писать обработчики событий (в Qt Creator)
Отправлено: lit-uriy от Май 10, 2009, 22:12
Лучше всё таки не примеры на этом этапе изучать, а учебное пособие, от версии Q4.4.3 и ниже, т.к. его зачем-то прибили в версии 4.5.
Тем более, что оно частично переведено на русский (тык (http://doc.crossplatform.ru/qt/4.4.3/tutorials-tutorial.html)).