Russian Qt Forum

Qt => Общие вопросы => Тема начата: borik120 от Сентябрь 20, 2010, 22:00



Название: нажатие на QPushButton
Отправлено: borik120 от Сентябрь 20, 2010, 22:00
скажите пожалуйста, можно ли как либо не используя сигналы и слоты, обработать нажатие на кнопку QPushButton.
для примера: вот как если в visual studio, в редакторе форм щелкаешь дважды на элемент какой нибудь и сразу создается обработчик события.
как можно реализовать такое с помощью Qt?
заранее спасибо




Название: Re: нажатие на QPushButton
Отправлено: kuzulis от Сентябрь 20, 2010, 22:04
Забудьте то что знали раньше. Делайте все вручную. Расширяйте кругозор!  ;)


Название: Re: нажатие на QPushButton
Отправлено: noirhor от Сентябрь 20, 2010, 22:48
если в visual studio, в редакторе форм щелкаешь дважды на элемент какой нибудь и сразу создается обработчик события.
как можно реализовать такое с помощью Qt?

ПКМ -> Перейти в слоту...


Название: Re: нажатие на QPushButton
Отправлено: borik120 от Сентябрь 21, 2010, 14:03
а если я кнопку програмно создаю?


Название: Re: нажатие на QPushButton
Отправлено: Alex_cs_gsp от Сентябрь 21, 2010, 14:12
а если я кнопку програмно создаю?


А как, если в студии кнопку программно создаешь? Тут аналогично - руками.


Название: Re: нажатие на QPushButton
Отправлено: borik120 от Сентябрь 21, 2010, 14:48
да понятно, что руками,а код то какой?


Название: Re: нажатие на QPushButton
Отправлено: Alex_cs_gsp от Сентябрь 21, 2010, 15:03
да понятно, что руками,а код то какой?

    QPushButton btn;
    QObject::connect(&btn, SIGNAL(clicked()), pMyObj, SLOT(slotMySlot()));


Название: Re: нажатие на QPushButton
Отправлено: borik120 от Сентябрь 21, 2010, 15:12
Цитировать
скажите пожалуйста, можно ли как либо не используя сигналы и слоты
мне интересно, как можно сделать это без сигналов и слотов. а как обычная обработка нажатия на кнопку в вижуал студио.

Код:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
//обработка события
}
вот таким образом, не используя сигналов


Название: Re: нажатие на QPushButton
Отправлено: kuzulis от Сентябрь 21, 2010, 15:22
Это:
http://www.prog.org.ru/topic_14837_0.html
http://www.prog.org.ru/topic_1113_0.html

и т.п.?


Название: Re: нажатие на QPushButton
Отправлено: Kolobok от Сентябрь 21, 2010, 15:29
Код:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
//обработка события
}
вот таким образом, не используя сигналов

Можно и так. А зачем? Посмотри
Код:
void QObject::installEventFilter ( QObject * filterObj )


Название: Re: нажатие на QPushButton
Отправлено: noirhor от Сентябрь 21, 2010, 15:33
да понятно, что руками,а код то какой?
Если вы по непонятным причинам, вдруг, хотите сделать то же, что создалось автоматически, то:
Цитировать
private slots:
    void on_pushButton_clicked();
Цитировать
void MainWindow::on_pushButton_clicked() { }
Сигналы со слотами коннектятся автоматически в setupUi():
Цитировать
QMetaObject::connectSlotsByName(MainWindow);

мне интересно, как можно сделать это без сигналов и слотов. а как обычная обработка нажатия на кнопку в вижуал студио.
Но зачем? Объясните в чем для вас разница между автоматическим созданием слота и автоматическим созданием события.


Название: Re: нажатие на QPushButton
Отправлено: borik120 от Сентябрь 21, 2010, 15:49
Цитировать
Если вы по непонятным причинам, вдруг, хотите сделать то же, что создалось автоматически, то:
мне кажется я что то сильно не догоняю.
пусть этот слот создался автоматически, тогда где мне можно написать обработку события для нажатия на этой кнопке?

извиняюсь, может опять что то не так "сморозил"


Название: Re: нажатие на QPushButton
Отправлено: noirhor от Сентябрь 21, 2010, 15:59
где мне можно написать обработку события для нажатия на этой кнопке?
Здесь же:
Цитировать
void MainWindow::on_pushButton_clicked() { }

В общем я также вас не понимаю. Возможно ваш пример
если в visual studio, в редакторе форм щелкаешь дважды на элемент
меня смутил.


Название: Re: нажатие на QPushButton
Отправлено: Denjs от Сентябрь 21, 2010, 16:06
можно ли как либо не используя сигналы и слоты, обработать нажатие на кнопку QPushButton.
вы батенька извращенец? мазохист? любите устраивать себе геморрой?  ;D

в прямую - никак)
обходной способ - поставьте фильтр событий  на виджет и отслеживайте события нажатия мыши.

Цитировать
вот как если в visual studio, в редакторе форм щелкаешь дважды на элемент какой нибудь и сразу создается обработчик события.
как можно реализовать такое с помощью Qt?
В редакторе форм, вызываете контестное меню для нужного вам элемента (для кнопки например) и там есть пунктик - "перейти к слоту".
выбираете слот который вы хотите обрабатывать - и в классе формы создается слот, который автоматически будет подключен к соответствующему сигналу при загрузке .ui-формы.


вы лучше объясните - чем вас так пугает сигнал-слотовый механизм?


Название: Re: нажатие на QPushButton
Отправлено: borik120 от Сентябрь 21, 2010, 16:25
Цитировать
вы лучше объясните - чем вас так пугает сигнал-слотовый механизм?
только без смеха)
я вот знаю, что сигнал будет от кнопки. а вот где слот создавать не пойму. в отдельном классе? или можо его просто обьявить? не пойму и все.
ну вот конкретно в моем случае. есть кнопка на форме и QLineEdit. мне нужно просто при нажатии на кнопку записать текст из QLineEdit в переменную стринг. и все. но не пойму я, где слот создавать.
можно смеяться)



Название: Re: нажатие на QPushButton
Отправлено: Denjs от Сентябрь 21, 2010, 16:42
Цитировать
вы лучше объясните - чем вас так пугает сигнал-слотовый механизм?
только без смеха)
я вот знаю, что сигнал будет от кнопки. а вот где слот создавать не пойму. в отдельном классе? или можо его просто обьявить? не пойму и все.
ну вот конкретно в моем случае. есть кнопка на форме и QLineEdit. мне нужно просто при нажатии на кнопку записать текст из QLineEdit в переменную стринг. и все. но не пойму я, где слот создавать.
можно смеяться)
>>а вот где слот создавать не пойму. в отдельном классе?
Слот - это метод класса который вызывается когда испускается сигнал, который подключили к данному слоту. Слоты определяются в секции slots при определении класса.
Где определять слот?  В любом классе. Хотите - в том-же, на который вы натягиваете .ui, хотите - в любом другом. Можно даже одновременно - подключить один сигнал к слотам 2-х обхъектов. и они оба будут вызываться при нажатии на кнопку.  Можно динамически переподключить к другому объекту, на другой слот.  (чуете мощь? чуете насколько VS/MFC и идеология "обработчика нажатия" убоги по сравнению с этим? )))) ;D


Название: Re: нажатие на QPushButton
Отправлено: Авварон от Сентябрь 21, 2010, 16:47
посмотрите примеры, идущие с Qt, многое прояснится.
слот создаете в классе, который будет являться контроллером формы. Обычно используется след схема:
есть класс Ui::MyForm, который вы подключаете в хедере "ui_myform.h" и класс MyForm (наследующийся от QWidget/QMainWindow/QDialog), который содержит указатель на Ui::MyForm (или наследуется от него, или содержит как член класса). Этот 2й класс и управляет логикой поведения ГУИ и содержит необходимые сигналы и слоты, подключенные к элементам в Ui::MyForm

Denjs
что-то по беглому взгляду вся эта "мощь" слизана с обжектив-си:)


Название: Re: нажатие на QPushButton
Отправлено: Denjs от Сентябрь 21, 2010, 17:36
Denjs
что-то по беглому взгляду вся эта "мощь" слизана с обжектив-си:)
вот уж не знаю чем вдохновлялись Троллтеч при создании QT, но согласитесь - получилось клёво )


Название: Re: нажатие на QPushButton
Отправлено: Авварон от Сентябрь 21, 2010, 17:38
ну многие места разочаровывают - к примеру интерфейсы (а их реализация - это вооще жесть, там используются фичи с++, о которых я даже не слышал)


Название: Re: нажатие на QPushButton
Отправлено: Пантер от Сентябрь 22, 2010, 12:31
В классе пишешь:
Код
C++ (Qt)
private slots:
   void yourSlot ()
   {
       //some code
   }
 
И коннектишь на него сигнал нажатия кнопки. И все. Советую почитать книжку по Кьюту.