Название: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 13:56 В общем так. У меня есть QString str="setGeometry(0,0,100,100)"; ну или любая другая функция, как мне её реализовать. Как это действие правильно называется я не знаю, отсюда и название темы. То есть, проще говоря, как команду записанную в строке выполнить в нужном месте.
Название: Re: Незнаю как правильно озаглавить тему Отправлено: GreatSnake от Апрель 27, 2011, 14:00 Мде...
Во-первых, форум не тот. Во-вторых, внимательно и несколько раз прочитай то, что сам написал. И делай выводы. Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 15:24 Прочитал несколько раз, тем не менее вопрос остался.
во 1 - прошу не писать посты типа: "внимательно прочитай" или "не проще просто реализовать функцию" и т.п. во 2 - предупреждайте в личку или на мыло о переносе темы, это адресовано тому кто переносит и веб разрабам. GreatSnake а вы лучше бы стёрли своё во 2-х =) если смысл вопросы не ясен то не пишите. Название: Re: Незнаю как правильно озаглавить тему Отправлено: GreatSnake от Апрель 27, 2011, 15:28 Ну сам подумай - сам не знаешь как это называется, нормально объяснить что тебе нужно не можешь и начинаешь обижаться.
Хочешь получать нормальные ответы - ставь нормальные вопросы. Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 15:31 Название форума освобождает меня от незнание этого действия.
А вопрос вполне правильно написан. Разжую: У нас есть строковая запись какой либо функции, нужно её реализовать в нужном месте. Хм тоже самое получилось. Как объяснить проще я не знаю. Название: Re: Незнаю как правильно озаглавить тему Отправлено: Fat-Zer от Апрель 27, 2011, 15:44 что вы спрашиваете действительно очень туманно... если вы спрашиваете, как распарсить строку и вызвать соответствующую функцию? то, дык, только ручками...
или хотя бы на псевдокоди напишите, что вам надо... Название: Re: Незнаю как правильно озаглавить тему Отправлено: Archa4 от Апрель 27, 2011, 15:48 К сожадению помочь не могу, но может удасться другим получше объяснить (если я все правильно понял).
Допустим есть QString str с содержанием типа "setGeometri(0,0,100,100)". Как эту строчку подать в программный код, чтобы компилятор её выполнил? Пример: QWidget *widget; widget->setGeometry(0, 0, 100, 100); НО вместо setGeometry(0, 0, 100, 100) подать строчку из QString... Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 15:49 Абсолютно верно.
http://www.prog.org.ru/topic_17653_0.html По моему в этой теме обсуждали что то похожее, но всё очень туманно, нужно конкретнее. Название: Re: Незнаю как правильно озаглавить тему Отправлено: Fat-Zer от Апрель 27, 2011, 16:00 Тогда средствами с++ такого не добится. К объектам, унаследованным от QObject по их именам - возможно добраться, но к методу по строке - только распарсить.
Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 16:05 хм... А вы посмотрели тему, линк на которую я дал?
Название: Re: Незнаю как правильно озаглавить тему Отправлено: Fat-Zer от Апрель 27, 2011, 16:09 хм... А вы посмотрели тему, линк на которую я дал? там как раз вопрос о поиске объекта по имениЗЫ: внимательно прочитайте какую-нибудь книжку по C++ Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 16:16 ЗЫ: внимательно прочитайте какую-нибудь книжку по C++ Не люблю я такие вещи =) сюда без базового знания С++ не приходят.А по теме: в Qt просто обязан быть такой класс который предусматривал бы вызов методов по их строковому представлению. Ладно... Если ещё пару знающих людей напишут что это невозможно то буду искать другие пути =) Название: Re: Незнаю как правильно озаглавить тему Отправлено: GreatSnake от Апрель 27, 2011, 16:17 Цитировать А по теме: в Qt просто обязан быть такой класс который предусматривал бы вызов методов по их строковому представлению. И кто мешал про это сразу сказать? А то - "как команду записанную в строке выполнить в нужном месте." ???См. QMetaObject::invokeMethod(). Но оный работает только с сигналами и слотами. т.е. setGeometry(0, 0, 100, 100) вызывать не получится, т.к. оный не слот. Название: Re: Незнаю как правильно озаглавить тему Отправлено: Igors от Апрель 27, 2011, 16:26 То есть, проще говоря, как команду записанную в строке выполнить в нужном месте. Это называется "интепретировать". В некоторых языках это делается просто (т.к. они сами "интерпретаторы"), но в C/С++ нет. Может в Qt есть специальные средства, о которых мне тоже было бы интересно узнать. Во всяком случае удовольствие будет дорогое, так что если нужно сделать просто несколько/немного таких вызовов, то лучше обойтись указателями на ф-ции.Название: Re: Незнаю как правильно озаглавить тему Отправлено: Denjs от Апрель 27, 2011, 16:28 С++ - это компилируемый язык а не интерпретируемый.
Вы не сможете испольнить для объекта функцию из строки, если сами не научите класс эту строку разбирать. Если брать Qt - то у него есть система метаданных, и вы сможете дергнуть invokeMethod() но он как сказали ранее - работает только с сигналами и слотами. ещё вы можете погрузить объект типа QWidget в скриптовую среду QtScript (а это уже интерпретируемый язык), и сгенерировать текст скрипта который попытается сделать "setGeometry(0, 0, 100, 100)" - но там тоже - только сигналы и слоты. Либо специальным образом описанная паблик функция. В общем понимайте разницу между "компиляторами" и"интерпретаторами". _____________________ Igors, ну как ты мог мою реплику украсть на минуту раньше?! ??? ;D Название: Re: Незнаю как правильно озаглавить тему Отправлено: Igors от Апрель 27, 2011, 16:36 Igors, ну как ты мог мою реплику украсть на минуту раньше?! ??? ;D Так получилось :) Вспомнилось - давно это было, еще на двойках. Приходит к нам паренек и говорит: "а у меня есть компилято Бейсика!". Как так - вроде не должно, ну покажи. Оказалось "компилятор" там просто сливает интерпретатор (вместе с текстом) в exe файл, а запуск сводится к раскрутке и запуску того же интерпретатора. Ну Васек :) Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 27, 2011, 17:42 Спасибо за ответ.
Плохо конечно что можно использовать только слоты. Буду искать альтернативы. Спасибо ещё раз. Название: Re: Незнаю как правильно озаглавить тему Отправлено: Denjs от Апрель 28, 2011, 00:29 Спасибо за ответ. вы не понимаете. ХОРОШО что можно использовать хотя бы слоты ;DПлохо конечно что можно использовать только слоты. Буду искать альтернативы. Спасибо ещё раз. Название: Re: Незнаю как правильно озаглавить тему Отправлено: RoulanD от Апрель 29, 2011, 09:14 я понимаю =) Но просто я думал у них будет какой-нибуть класс который сопоставлял бы строковым представлениям функций сами функции.
Название: Re: Незнаю как правильно озаглавить тему Отправлено: Fat-Zer от Апрель 29, 2011, 09:19 я понимаю =) Но просто я думал у них будет какой-нибуть класс который сопоставлял бы строковым представлениям функций сами функции. а вот это как раз средствами с++ и не возможно сделать...Название: Re: Незнаю как правильно озаглавить тему Отправлено: GreatSnake от Апрель 29, 2011, 09:22 я понимаю =) Но просто я думал у них будет какой-нибуть класс который сопоставлял бы строковым представлениям функций сами функции. QMetaObject этим и занимается. Просто, чтобы связать функции со "строковым представлениям функций" нужно соответствующие методы "обернуть" в SIGNAL/SLOT. А уже moc-compiler добавит нужный код. В компилируемом языке иначе никак.Название: Re: Незнаю как правильно озаглавить тему Отправлено: Igors от Апрель 29, 2011, 10:17 а вот это как раз средствами с++ и не возможно сделать... Ну почему "невозможно". В конце концов, интерпретаторы написаны на том же С/C++. Просто это совсем не то что "есть под рукой и надо использовать" |