Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: __Heaven__ от Декабрь 22, 2011, 03:16



Название: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 22, 2011, 03:16
Привет всем. Я начинающий изучать Qt на VS 2008. Меня крайне срочно заинтересовал вопрос, как мне имея несколько спинов, кнопку и текстэдит по нажатии на кнопку считать спины в пременные, выполнить функцию, зависящую от этих переменных и вывести результат в текстэдит? Заранее благодарен.


Название: Re: По кнопке выполнить функцию
Отправлено: kambala от Декабрь 22, 2011, 03:32
для начала надо бы почитать документацию о механизме сигналов-слотов и посмотреть какие есть методы у спинов и текстэдита, можно еще примеры какие-то посмотреть. после этого все должно стать ясно.


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 22, 2011, 07:21
ды знаю я о connect на clicked()
мне не понятно, как взять значения и записать в переменные для начала...


Название: Re: По кнопке выполнить функцию
Отправлено: iroln от Декабрь 22, 2011, 08:01
У QSpinBox есть методы value/setValue, через них и получаешь/устанавливаешь значение. Документация рулит. :)


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 22, 2011, 11:46
да. эти свойства я видел.
Просто я привык в дэлфи, что на нажатие кнопки существует обычная функция. Так вот, я и хотел бы создать и связать эту функцию с кнопкой.
извиняюсь за свой маразм, но я действительно не могу найти, как это сделать. Документация на сайте и в асистанте не помогает мне. наверное путаюсь. есть ли у кого пример похожий?Может кто поделится?


Название: Re: По кнопке выполнить функцию
Отправлено: kambala от Декабрь 22, 2011, 13:44
слот, который ты соединяешь с сигналом clicked(), и есть эта "обычная функция", за исключением того, что это просто метод класса.
ды знаю я о connect на clicked()
я и хотел бы создать и связать эту функцию с кнопкой.
противоречишь сам себе


Название: Re: По кнопке выполнить функцию
Отправлено: KrupaKarlo от Декабрь 22, 2011, 13:53
Допустим есть  spin1 и spin2 кнопка btn и textedit
считаем функцию что spin1*spin2 - 2.3

Код:
connect(btn, SIGNAL(clicked()), this, SLOT(slot_lolo()) );


double Класс::result()
{
     return spin1->value()*spin2->value() - 2.3;
}

void Класс::slot_lolo()
{
    textedit->setText(QString::number(result()));
}



примерно так, но писал от балды не проверяя могут быть косяки. Если ты не Киркоров остальное додумаешь



Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 22, 2011, 19:58
о. да, что-то похожее я видел. но я не понял, что есть this.


Название: Re: По кнопке выполнить функцию
Отправлено: kambala от Декабрь 22, 2011, 20:23
значит для начала надо почитать о классах в С++


Название: Re: По кнопке выполнить функцию
Отправлено: KrupaKarlo от Декабрь 23, 2011, 07:55
this на пальцах это ссылка на самого себя. т.е. тут говорится, что обрабатывать нажатие кнопки будет функция класса в котором ты код и пишешь)


Название: Re: По кнопке выполнить функцию
Отправлено: lighting от Декабрь 23, 2011, 10:11
но я не понял, что есть this.
то же что self в delphi


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 23, 2011, 13:11
Ребят, ввожу
Код:
connect (ThermodynamicRunButton, SIGNAL(clicked()), this, SLOT(my_function());
где
Код:
double a;

void my_function()
{
a=0;
}
выдаёт
error C2673: 'main' : global functions do not have 'this' pointers


Название: Re: По кнопке выполнить функцию
Отправлено: joker от Декабрь 23, 2011, 13:34
1. RTFM C++
2. RTFM Qt
....................
n. Быстрый вариант для студента - делать форму в дизайнере QtCreator-a  - ПКМ по кнопке на форме, "Перейти к слоту", clicked().
При этом доступ к другим элементам формы как ui->



Название: Re: По кнопке выполнить функцию
Отправлено: KrupaKarlo от Декабрь 23, 2011, 14:30
Даже по ошибке понятно что ты делаешь не так.  Полное незнание ни Qt ни даже основ С++...


Название: Re: По кнопке выполнить функцию
Отправлено: iroln от Декабрь 23, 2011, 15:52
Да чел сам в шоке, какие-то классы, функции, С++, что это вообще фиг поймёшь. О том, что про всё это можно прочитать в книжке, наверное, даже мысль такая не приходила в голову? :)

Как-то всё это печально.


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 23, 2011, 16:58
К сожалению, я знаком только с процедурным программированием на C++, Qt только начал изучать, знаю только основы, даже, наверное, меньше. Результаты нужны очень скоро, а при беглом прочтении текста я не смог найти связи кнопки с функцией. Мне сегодня подсказали, что нужно как-то сделать класс со слотом my_function.


Название: Re: По кнопке выполнить функцию
Отправлено: Igors от Декабрь 23, 2011, 17:16
К сожалению, я знаком только с процедурным программированием на C++, Qt только начал изучать, знаю только основы, даже, наверное, меньше. Результаты нужны очень скоро, а при беглом прочтении текста я не смог найти связи кнопки с функцией. Мне сегодня подсказали, что нужно как-то сделать класс со слотом my_function.
"Метод" - это тоже ф-ция, просто компилятор ей передает еще "this" (указатель на экземпляр), вот и вся разница. За полчаса спокойно можно освоить, пусть поверхностно. А на слезу (мол, результаты нужны ASAP) не давите - не поможет  :)


Название: Re: По кнопке выполнить функцию
Отправлено: iroln от Декабрь 23, 2011, 18:25
К сожалению, я знаком только с процедурным программированием на C++...
А вот это уже "заслуга" преподавателей в университетах, которые читают курс по С++, думая, что это почти то же самое, что С, и студентам все эти ваши ООП знать не следует. :)


Название: Re: По кнопке выполнить функцию
Отправлено: BRE от Декабрь 23, 2011, 18:35
А вот это уже "заслуга" преподавателей в университетах, которые читают курс по С++, думая, что это почти то же самое, что С, и студентам все эти ваши ООП знать не следует. :)
Ну привет, преподаватели виноваты... А самому почитать - никак? Или преподаватели запрещают?  :)
Ну это конечно если самому надо...


Название: Re: По кнопке выполнить функцию
Отправлено: Igors от Декабрь 23, 2011, 18:40
.. думая, что это почти то же самое, что С, и студентам все эти ваши ООП знать не следует. :)
Ну "в прынцыпе" я с ними согласен, ++ это так, небольшая (пусть весьма удобная) надстройка, не более того  :)


Название: Re: По кнопке выполнить функцию
Отправлено: BRE от Декабрь 23, 2011, 18:41
Ну "в прынцыпе" я с ними согласен, ++ это так, небольшая (пусть весьма удобная) надстройка, не более того  :)
::) Надстройка над чем?


Название: Re: По кнопке выполнить функцию
Отправлено: iroln от Декабрь 23, 2011, 18:51
Ну привет, преподаватели виноваты... А самому почитать - никак? Или преподаватели запрещают?  :)
Ну это конечно если самому надо...

Хороший преподаватель должен уметь привить любовь к тому предмету, которому учит. Можно так вести курс, что люди заинтересуются, потянутся, начнут самостоятельно знания получать, будут понимать, как это применить в реальной жизни. А можно всё спустить на тормозах, как обычно и делают, в итоге всем на всё наплевать и никому ничего не интересно. От самих студентов, конечно, тоже многое зависит, но всё же качество преподавания очень важно.

Помню, как нам читали ассемблер. Казалось бы, скучнейшая вещь, но ведь препод так читал, с такой любовью, что хотелось поскорее придти домой, запустить OllyDbg или SoftICE и сидеть всю ночь напролёт, ковыряя что-нибудь. :)


Название: Re: По кнопке выполнить функцию
Отправлено: Igors от Декабрь 23, 2011, 18:53
::) Надстройка над чем?
Над логикой и умением думать самому  :)


Название: Re: По кнопке выполнить функцию
Отправлено: Igors от Декабрь 23, 2011, 19:13
[quote author=BRE link=topic=20445.msg13
Хороший преподаватель должен уметь привить любовь к тому предмету, которому учит. Можно так вести курс, что люди заинтересуются, потянутся, начнут самостоятельно знания получать, будут понимать, как это применить в реальной жизни. А можно всё спустить на тормозах, как обычно и делают, в итоге всем на всё наплевать и никому ничего не интересно. От самих студентов, конечно, тоже многое зависит, но всё же качество преподавания очень важно.
То да! У меня был такой - и я его запомнил на всю жизнь. "Девушка, а ну идите-ка сюда", "Идите - идите". "Не надо прикидываться дураком - это проще всего". "А ну-ка посчитайте коэффициент усиления по току". А что по входному сопротивлению?  А теперь все хором... Даю под запись/конспект. Это был МАСТЕР своего дела - и пусть оно мне никогда в жизни не понадобилось - неважно


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 25, 2011, 15:41
Хех. Ну вы и раздули офтоп. Ладно, я понял, что мне надо научиться создавать классы, чтобы решить свою проблемму.


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 26, 2011, 22:50
Ну вот, теперь при создании класса у меня проблема с moc


Название: Re: По кнопке выполнить функцию
Отправлено: iroln от Декабрь 26, 2011, 22:59
Ну вот, теперь при создании класса у меня проблема с moc
Здравствуйте, я телепат! Я угадываю ваши мысли. Лучше не думать в моём присутствии, потому что я знаю о чём вы сейчас думаете.

Q_OBJECT

:)


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 27, 2011, 05:07
ды вписал я его... не понимаю, в чём дело.


Название: Re: По кнопке выполнить функцию
Отправлено: Nimbus от Декабрь 27, 2011, 06:20
ды вписал я его... не понимаю, в чём дело.
Остальные телепаты в отпуске. Выложил бы ты весь код


Название: Re: По кнопке выполнить функцию
Отправлено: KrupaKarlo от Декабрь 27, 2011, 07:53
Ты по любому сделал класс прямо в файле main.cpp
Вот он и на мок ругается. надо создавать отдельный класс.h класс.cpp.
Если ты хочешь создавать класс именно в main.cpp, то надо внизу прописывать ссылку на moc файл. А иначе да он ругается на moc  :)


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Декабрь 31, 2011, 16:14
Я так и не смог найти пример...
Нет волонтёров написать считывание спинбокса по кнопке, умножение его значения на 2 и вывод в текстовое поле?


Название: Re: По кнопке выполнить функцию
Отправлено: kambala от Декабрь 31, 2011, 16:35
держи


Название: Re: По кнопке выполнить функцию
Отправлено: __Heaven__ от Январь 02, 2012, 14:18
Огромнейшее спасибо! Как раз то, что надо!
Всех с наступившим новым годом!