Название: Как в диалоговое окно передать переменные Отправлено: 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 в каком то классе кот., принимает или передает - это будет не удобно а так норм. |