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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Незнаю как правильно озаглавить тему  (Прочитано 7731 раз)
RoulanD
Гость
« : Апрель 27, 2011, 13:56 »

В общем так. У меня есть QString str="setGeometry(0,0,100,100)"; ну или любая другая функция, как мне её реализовать. Как это действие правильно называется я не знаю, отсюда и название темы. То есть, проще говоря, как команду записанную в строке выполнить в нужном месте.
« Последнее редактирование: Апрель 27, 2011, 15:50 от RoulanD » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 27, 2011, 14:00 »

Мде...
Во-первых, форум не тот.
Во-вторых, внимательно и несколько раз прочитай то, что сам написал. И делай выводы.
Записан

Qt 5.11/4.8.7 (X11/Win)
RoulanD
Гость
« Ответ #2 : Апрель 27, 2011, 15:24 »

Прочитал несколько раз, тем не менее вопрос остался.
во 1 - прошу не писать посты типа: "внимательно прочитай" или "не проще просто реализовать функцию" и т.п.
во 2 - предупреждайте в личку или на мыло о переносе темы, это адресовано тому кто переносит и веб разрабам.

GreatSnake
а вы лучше бы стёрли своё во 2-х =)
если смысл вопросы не ясен то не пишите.
« Последнее редактирование: Апрель 27, 2011, 15:26 от RoulanD » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 27, 2011, 15:28 »

Ну сам подумай - сам не знаешь как это называется, нормально объяснить что тебе нужно не можешь и начинаешь обижаться.
Хочешь получать нормальные ответы - ставь нормальные вопросы.
Записан

Qt 5.11/4.8.7 (X11/Win)
RoulanD
Гость
« Ответ #4 : Апрель 27, 2011, 15:31 »

Название форума освобождает меня от незнание этого действия.
А вопрос вполне правильно написан.
Разжую: У нас есть строковая запись какой либо функции, нужно её реализовать в нужном месте. Хм тоже самое получилось. Как объяснить проще я не знаю.
Записан
Fat-Zer
Гость
« Ответ #5 : Апрель 27, 2011, 15:44 »

что вы спрашиваете действительно очень туманно... если вы спрашиваете, как распарсить строку и вызвать соответствующую функцию? то, дык, только ручками...

или хотя бы на псевдокоди напишите, что вам надо...
Записан
Archa4
Гость
« Ответ #6 : Апрель 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...
Записан
RoulanD
Гость
« Ответ #7 : Апрель 27, 2011, 15:49 »

Абсолютно верно.
http://www.prog.org.ru/topic_17653_0.html
По моему в этой теме обсуждали что то похожее, но всё очень туманно, нужно конкретнее.
Записан
Fat-Zer
Гость
« Ответ #8 : Апрель 27, 2011, 16:00 »

Тогда средствами с++ такого не добится. К объектам, унаследованным от QObject по их именам - возможно добраться, но к методу по строке - только распарсить.
Записан
RoulanD
Гость
« Ответ #9 : Апрель 27, 2011, 16:05 »

хм... А вы посмотрели тему, линк на которую я дал?
Записан
Fat-Zer
Гость
« Ответ #10 : Апрель 27, 2011, 16:09 »

хм... А вы посмотрели тему, линк на которую я дал?
там как раз вопрос о поиске объекта по имени

ЗЫ: внимательно прочитайте какую-нибудь книжку по C++
Записан
RoulanD
Гость
« Ответ #11 : Апрель 27, 2011, 16:16 »

ЗЫ: внимательно прочитайте какую-нибудь книжку по C++
Не люблю я такие вещи =) сюда без базового знания С++ не приходят.
А по теме: в Qt просто обязан быть такой класс который предусматривал бы вызов методов по их строковому представлению.
Ладно... Если ещё пару знающих людей напишут что это невозможно то буду искать другие пути =)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Апрель 27, 2011, 16:17 »

Цитировать
А по теме: в Qt просто обязан быть такой класс который предусматривал бы вызов методов по их строковому представлению.
И кто мешал про это сразу сказать? А то - "как команду записанную в строке выполнить в нужном месте."  Непонимающий

См. QMetaObject::invokeMethod(). Но оный работает только с сигналами и слотами.
т.е. setGeometry(0, 0, 100, 100) вызывать не получится, т.к. оный не слот.
« Последнее редактирование: Апрель 27, 2011, 16:25 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Апрель 27, 2011, 16:26 »

То есть, проще говоря, как команду записанную в строке выполнить в нужном месте.
Это называется "интепретировать". В некоторых языках это делается просто (т.к. они сами "интерпретаторы"), но в C/С++ нет. Может в Qt есть специальные средства, о которых мне тоже было бы интересно узнать. Во всяком случае удовольствие будет дорогое, так что если нужно сделать просто несколько/немного таких вызовов, то лучше обойтись указателями на ф-ции.
Записан
Denjs
Гость
« Ответ #14 : Апрель 27, 2011, 16:28 »

С++ - это компилируемый язык а не интерпретируемый.
Вы не сможете испольнить для объекта функцию из строки, если сами не научите класс эту строку разбирать.

Если брать Qt - то у него есть система метаданных, и вы сможете дергнуть invokeMethod() но он как сказали ранее - работает только с сигналами и слотами.

ещё вы можете погрузить объект типа QWidget в скриптовую среду QtScript (а это уже интерпретируемый язык), и сгенерировать текст скрипта который попытается сделать "setGeometry(0, 0, 100, 100)" - но там тоже - только сигналы и слоты. Либо специальным образом описанная паблик функция.


В общем понимайте разницу между "компиляторами" и"интерпретаторами".
_____________________
Igors, ну как ты мог мою реплику украсть на минуту раньше?!  Непонимающий Смеющийся
« Последнее редактирование: Апрель 27, 2011, 16:31 от Denjs » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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