Название: Как в диалоговое окно передать переменные Отправлено: RuslanBZ от Июль 12, 2009, 11:28 Написал тестовую программу.
Как мне в диалоговое окно передать переменные? main.cpp Код: #include <QApplication> dialogimpl.h Код: #ifndef DIALOGIMPL_H dialogimpl.cpp Код: #include "dialogimpl.h" Название: Re: Как в диалоговое окно передать переменные Отправлено: ASeN от Июль 12, 2009, 12:35 Может быть так?
#include "dialogimpl.h" // extern int i; ... Название: Re: Как в диалоговое окно передать переменные Отправлено: BRE от Июль 12, 2009, 12:56 [off]
Хочу писать программы с использованием Qt. Выучить C++ не предлагать. [/off] Название: Re: Как в диалоговое окно передать переменные Отправлено: ufna от Июль 12, 2009, 13:09 Цитировать class DialogImpl : public QDialog, public Ui::Dialog { Q_OBJECT public: DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); void setI(int i) { thisI = i; }; private: int thisI; }; Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 12, 2009, 13:26 [off] +5Хочу писать программы с использованием Qt. Выучить C++ не предлагать. [/off] Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 12, 2009, 15:20 Цитировать Может быть так? так точно не нужно.#include "dialogimpl.h" // extern int i; сделай соответствующий внешний метод в классе диалоговогог окна устанавливающий нужную переменную, структуру или указатель на то что тебе нужно Код
В некоторых случаях для больших структур удобно использовать шаблон одиночка - найди инф. о нем и почитай - там ничего сложного. Правда все это не относится к Qt Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 12, 2009, 16:40 Код
Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 12, 2009, 17:51 1) сори я там пропустил void
Код: class CDialog 2) обычно всегда для таких методов делаю inline т.к. код метода очень прост, тем не менее это все равно на усмотрение компилятора Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 12, 2009, 18:05 1) сори я там пропустил void 1) =)Код: class CDialog 2) обычно всегда для таких методов делаю inline т.к. код метода очень прост, тем не менее это все равно на усмотрение компилятора 2) а то что функция определена в самом классе её не делает inline или это чтобы наверняка? контрольный выстрел =) Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 12, 2009, 20:19 Цитировать а то что функция определена в самом классе её не делает inline Не буду утверждать но мне кажется не делает. Как мне казалось если мы реализуем функцию в объявлении класса - она никакого отношения к inline не имеет. Если же пишем inline - то возможно компилятор сделает ее действительно такой (подставит код функции во все места ее вызова). Т.е. inline - это вроде как просьба программиста к компилятору, которая вполне может оказаться невыполненной. А по поводу реализации функций в классе это конечно плохой тон программирования - но у некоторых такие функции частенько немаленького размера - что ж они все inline что ли будут? Название: Re: Как в диалоговое окно передать переменные Отправлено: Rcus от Июль 12, 2009, 20:28 TC++PL специальное издание, 10.2.9. Определение функции в классе.
Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 12, 2009, 21:46 Цитировать а то что функция определена в самом классе её не делает inline Не буду утверждать но мне кажется не делает. Как мне казалось если мы реализуем функцию в объявлении класса - она никакого отношения к inline не имеет. Если же пишем inline - то возможно компилятор сделает ее действительно такой (подставит код функции во все места ее вызова). Т.е. inline - это вроде как просьба программиста к компилятору, которая вполне может оказаться невыполненной. А по поводу реализации функций в классе это конечно плохой тон программирования - но у некоторых такие функции частенько немаленького размера - что ж они все inline что ли будут? Не все, а те которые можно сделать inline =) Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 12, 2009, 22:38 Цитировать TC++PL специальное издание, 10.2.9. Определение функции в классе. И что там по вашему? Разве написано что inline необязательно писать и что просто встраиваемая функция будет рассмотрена как inline? Во вложении этот самый пункт! Название: Re: Как в диалоговое окно передать переменные Отправлено: Rcus от Июль 12, 2009, 22:49 Именно это и написано (встраиваемая функция это такой перевод inlined function. блин даже пришлось подсмотреть оригинал чтобы подавить сомнения, надо было брать его, а не перевод :()
Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 12, 2009, 23:00 И что там по вашему? Разве написано что inline необязательно писать и что просто встраиваемая функция будет рассмотрена как inline? Там все так и написано =) Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 13, 2009, 00:17 1) спасибо за разъяснения
2) для чего тогда предназначено ключевое слово inline? Чтобы объявить функцию и написать реализацию в CPP файле? 3) ничего нового для моего программистского развития это открытие не принесет т.к. стараюсь писать код кот. не будет зависеть от "вычюренных" особенностей C++. Например нигде не позволю себе написать что-то где будет важно какой тип оператора инкремента использован - префиксныйi или постфиксный (i++ или ++i). Также это мое "Лишнее" указание слова inline - если по каким-то причинам захочется оставить inline функцию, но реализацию перенести в CPP то уже никак "не забудется" дописать inline в объявлении (хотя это если я верно предположил во 2-м пункте, иначе вообще непонятно зачем ключевое слово inline). Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 13, 2009, 00:33 1) спасибо за разъяснения 2) для чего тогда предназначено ключевое слово inline? Чтобы объявить функцию и написать реализацию в CPP файле? 3) ничего нового для моего программистского развития это открытие не принесет т.к. стараюсь писать код кот. не будет зависеть от "вычюренных" особенностей C++. Например нигде не позволю себе написать что-то где будет важно какой тип оператора инкремента использован - префиксныйi или постфиксный (i++ или ++i). Также это мое "Лишнее" указание слова inline - если по каким-то причинам захочется оставить inline функцию, но реализацию перенести в CPP то уже никак "не забудется" дописать inline в объявлении (хотя это если я верно предположил во 2-м пункте, иначе вообще непонятно зачем ключевое слово inline). 1) Я просто спросил зачем, я ни в коем случае не хотел задеть =) Я и не думал что начнется такая полемика. 2) Функции могут быть не только членами классов. Они также могут быть не встроенными в описание класса, но inline. 3) Я даже не пытался повлиять на ваше развитие. Префиксный и суффиксный ++(--) бывает довольно удобен, но дело ваше. Если вы перенесете определение в CPP файл и допишите к ней inline то функци ТОЧНО!!! не будет сделана встроенной( опять же я не пытаюсь как то повлиять на ваше развитие, а просто сообщаю). Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 13, 2009, 01:51 Получается что ключевое слово inline имеет смысл только для функции находящейся вне тела класса но являющейся его частью и реализованной в h файле? Т.к. остальные ф-ции реализованные в описание класса и так по возможности станут inline а ф-ции не присутствующие в теле класса никогда не станут inline. Хоть это так?
Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 13, 2009, 08:18 Употребление там где вы написали не является ошибкой, просто его можно не писать.
Также это слово можно употреблять для функций не членов класса, НО! она должна быть описана до её первого вызова, поэтому кстати inline функции класса должны быть в .h файле. Ну и наконец не стоит забывать что компилятор может сам принять решение сделать функцию такой без запроса на встраивание. Все так. Давай те уже закроем эту тему, а то у нас такой оффтоп получился =) Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 13, 2009, 11:41 Ok. Спасибо за прояснение ситуации.
Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 13, 2009, 12:14 Ok. Спасибо за прояснение ситуации. Не за что =)Название: Re: Как в диалоговое окно передать переменные Отправлено: Enough от Июль 16, 2009, 14:25 Возвращаясь к сабжу: а почему бы в конструкторе не передать эту переменную? Как-то не очень круто для этого новый метод создавать..
Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 16, 2009, 14:44 Возвращаясь к сабжу: а почему бы в конструкторе не передать эту переменную? Как-то не очень круто для этого новый метод создавать.. И так можно, только походу автору, это уже не нужно =)Название: Re: Как в диалоговое окно передать переменные Отправлено: Alex Custov от Июль 16, 2009, 16:18 2) для чего тогда предназначено ключевое слово inline? Чтобы объявить функцию и написать реализацию в CPP файле? Чтобы встраивать функции :) Хотя компилятор может отказаться от встраивания. Inline функции должны быть доступны всем единицам компиляции (TU), поэтому их реализуют в .h файле, а не .cpp. Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Июль 16, 2009, 17:15 Цитировать Чтобы встраивать функции Хотя компилятор может отказаться от встраивания. Inline функции должны быть доступны всем единицам компиляции (TU), поэтому их реализуют в .h файле, а не .cpp. Вы похоже немного не в курсе - посмотрите тему сначала.. Вопрос в том что чтобы встраивать не обязательно писать ключевое слово inline.Название: Re: Как в диалоговое окно передать переменные Отправлено: Alex Custov от Июль 16, 2009, 17:19 Вы похоже немного не в курсе - посмотрите тему сначала.. Вопрос в том что чтобы встраивать не обязательно писать ключевое слово inline. Ну, ты спросил зачем нужно inline, я ответил. В чём подвох? :) Встраивать можно явно реализовав метод внутри класса, либо реализовав отдельно, но со словом inline, так же как и обычные функции... Название: Re: Как в диалоговое окно передать переменные Отправлено: f-r-o-s-t от Июль 16, 2009, 17:32 Вы похоже немного не в курсе - посмотрите тему сначала.. Вопрос в том что чтобы встраивать не обязательно писать ключевое слово inline. Ну, ты спросил зачем нужно inline, я ответил. В чём подвох? :) Встраивать можно явно реализовав метод внутри класса, либо реализовав отдельно, но со словом inline, так же как и обычные функции... Название: Re: Как в диалоговое окно передать переменные Отправлено: sergun1604 от Октябрь 05, 2010, 10:51 а я дак через сигналы все передаю.
Название: Re: Как в диалоговое окно передать переменные Отправлено: break от Октябрь 05, 2010, 17:17 Цитировать а я дак через сигналы все передаю. в случае если захочется избавится от QObject в каком то классе кот., принимает или передает - это будет не удобно а так норм. |