Russian Qt Forum

Программирование => Общий => Тема начата: ruzik от Февраль 04, 2011, 19:18



Название: Переменная объекта
Отправлено: ruzik от Февраль 04, 2011, 19:18
Обращение к переменной объекта
А как обратиться к переменной объекта, например мне нужен text у QLineEdit
Вот так выдает ошибку
QLineEdit.text
QLineEdit->getText()


Название: Re: Переменная объекта
Отправлено: Omg от Февраль 04, 2011, 19:41
Если обращение внутри класса то просто:
В заголовочном:
QLineEdit line;
в конструкторе класса инициируем текст едит.
line = new QLineEdit;

а потом где угодно внутри класса обращаемся
line.text();


Название: Re: Переменная объекта
Отправлено: Пантер от Февраль 04, 2011, 19:45
ruzik, это вопрос по с++. Ты его совершенно не знаешь. Не питонщик, случаем?


Название: Re: Переменная объекта
Отправлено: ruzik от Февраль 04, 2011, 20:44
Нет, С++ я знаю вроде как достаточно неплохо, насколько может знать 10 классник, раньше какое-то время сидел на net'e
А как раз таки С++ обращение, то есть QLineEdit.text не идет, оказывается надо еще и скобки писать(то есть обращение к функции, а не к переменной text типа QString)
Просто опыта еще очень мало, С++ сам выучил, net тоже(хотя его я не особо выучил, так баловался)


Название: Re: Переменная объекта
Отправлено: Omg от Февраль 04, 2011, 21:06
Где в классе QLineEdit вы нашли переменную к которой можно обратиться?
line.text() вызывает метод объекта класса QLineEdit
"text : QString

This property holds the line edit's text.

Setting this property clears the selection, clears the undo/redo history, moves the cursor to the end of the line and resets the modified property to false. The text is not validated when inserted with setText().

The text is truncated to maxLength() length.

By default, this property contains an empty string.

Access functions:

QString text () const
void setText ( const QString & )
See also insert() and clear()."


Название: Re: Переменная объекта
Отправлено: ufna от Февраль 04, 2011, 21:08
Нет, С++ я знаю вроде как достаточно неплохо, насколько может знать 10 классник, раньше какое-то время сидел на net'e
А как раз таки С++ обращение, то есть QLineEdit.text не идет, оказывается надо еще и скобки писать(то есть обращение к функции, а не к переменной text типа QString)
Просто опыта еще очень мало, С++ сам выучил, net тоже(хотя его я не особо выучил, так баловался)

В 10м классе сипипи можно знать гораздо лучше )

а вопрос как раз из ряда лексики языка, что есть основы.


Название: Re: Переменная объекта
Отправлено: ruzik от Февраль 04, 2011, 21:32
Цитировать
Где в классе QLineEdit вы нашли переменную к которой можно обратиться?
Так я же по-моему и написал, что хотел обратиться как к переменной, как например в net'e, по незнанию, и меня исправили, что надо обращаться к нужной функции
Цитировать
В 10м классе сипипи можно знать гораздо лучше )
а вопрос как раз из ряда лексики языка, что есть основы.
Нет вы не правы, вопрос по лексике фраемворка, а не самого С++, так как это Qt диктует, что если хочешь получить текст используй функцию, просто удобно было бы сделать предпроцессор, который бы в таком случае позволял бы обращаться к переменным объектов, и по-моему непонятно почему не так это реализовали
Например в net'e подобная реализация(та про которую я говорю), насколько я знаю в mfc


Название: Re: Переменная объекта
Отправлено: Omg от Февраль 04, 2011, 21:43
Код:
class ABC{
private:
   int integer;

public:
   int i(void){return integer;}
}
причем тут кутя? А реализовали это приследуя простое правило: инкапсуляция.


Название: Re: Переменная объекта
Отправлено: ieroglif от Февраль 05, 2011, 00:57
нет смысла устраивать холиворсы.
данный момент действительно является моментом Qt.
оффтоп: но стоит понимать разницу между указателем на объект и переменной объекта ("->" и ".").
в Qt обращение к переменным объектов реализовано по максимуму через методы, и прямого доступа к переменным обычно нету.
что бы получить text - есть метод text() возвращающий QString.
что бы установить text - есть setText(QString)
так же это связано с Q_PROPERTY, позволяющим оперировать параметрами объекта самыми различными способами (например из QtScript, или через setProperty(..) метод), так что это в итоге становится более выгодно, нежели открывать переменную объекта напрямую.
имхо, конечно ;)


Название: Re: Переменная объекта
Отправлено: Sancho_s_rancho от Февраль 05, 2011, 11:03
Цитировать
С++ сам выучил
В стандарте более 1000 страниц "мелким почерком" и плюс к этому ссылки на другие стандарты (к примеру на "С"). Ежели бы ты "выучил" C++, то простейших вопросов по соглашениям во фреимвоке Qt не было бы.


Название: Re: Переменная объекта
Отправлено: Пантер от Февраль 05, 2011, 11:12
ruzik, читай Страуструпа. Раздел про классы. Сам все поймешь.


Название: Re: Переменная объекта
Отправлено: Blackwanderer от Февраль 05, 2011, 12:09
данный момент действительно является моментом Qt.
Отнюдь. Это - основы ООП, даже безотносительно к какому-либо языку. Доступ к переменным класса должен идти через методы класса. Это позволяет пользователю не думать о том, как реализована внутренняя структура класса. От Qt тут только принцип именования функций доступа.


Название: Re: Переменная объекта
Отправлено: ieroglif от Февраль 05, 2011, 14:06
данный момент действительно является моментом Qt.
Отнюдь. Это - основы ООП, даже безотносительно к какому-либо языку. Доступ к переменным класса должен идти через методы класса. Это позволяет пользователю не думать о том, как реализована внутренняя структура класса. От Qt тут только принцип именования функций доступа.
готов признать что я не прав =) давайте только без холировсов? =)


Название: Re: Переменная объекта
Отправлено: Авварон от Февраль 05, 2011, 15:20
Черный Странник
В дотнете доступ идет по имени переменной: string.text, а геттеры/сеттеры зовутся автоматом. То есть там как раз таки пишут string.text = "abc"; Так что не надо тут про основы ООП вспоминать)


Название: Re: Переменная объекта
Отправлено: pastor от Февраль 05, 2011, 15:41
А дотнете это эталон чтоли?


Название: Re: Переменная объекта
Отправлено: Fat-Zer от Февраль 05, 2011, 15:41
Черный Странник
В дотнете доступ идет по имени переменной: string.text, а геттеры/сеттеры зовутся автоматом. То есть там как раз таки пишут string.text = "abc"; Так что не надо тут про основы ООП вспоминать)
Разберитесь перед тем, как писать. В .net введёно понятие property, поля, которые компилятор сам разбирает, являются ли они lvalue или rvalue. То бишь доступа к переменной у нас как такового нет! мы никогда не сможем написать что-то вроде "string.text += "abc" ", да и вообще произвести какую-либо операцию кроме get и set не сможем.


Название: Re: Переменная объекта
Отправлено: Blackwanderer от Февраль 05, 2011, 16:18
В дотнете доступ идет по имени переменной: string.text, а геттеры/сеттеры зовутся автоматом. То есть там как раз таки пишут string.text = "abc"; Так что не надо тут про основы ООП вспоминать)
Не по имени переменной, а по имени свойства (property). Все обращения к свойству компилятор автоматически преобразует в вызов get и set функций.