Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alex_cs_gsp от Август 28, 2010, 19:07



Название: Успешность вызова метода
Отправлено: Alex_cs_gsp от Август 28, 2010, 19:07
Я столкнулся с тем, что не всегда понимаю нужно ли проверять возвращаемое методом значение или нет, и как на него реагировать.
Например, метод bool QAbstractItemModel::insertRows().
Я Qt только учусь, но программил WinAPi/MFC. В мсдн всегда указываются причины, которые приводили к ошибке, для таких вроде бы безобидных функций - то ли не удается выделить память, то-ли передан нулевой указатель...., и уже на основе этого принимается решение, то ли завершить программу, то ли должен как-то отреагировать пользователь и т.п.
Как тут???


Название: Re: Успешность вызова метода
Отправлено: Пантер от Август 29, 2010, 21:13
Цитировать
bool QAbstractItemModel::insertRow ( int row, const QModelIndex & parent = QModelIndex() )
Note: The base class implementation of this function does nothing and returns false.

Inserts a single row before the given row in the child items of the parent specified.

Returns true if the row is inserted; otherwise returns false.
Чего не понятно?


Название: Re: Успешность вызова метода
Отправлено: Авварон от Август 29, 2010, 21:34
по умолчанию, этот метод ничего не делает, как я уже вам писал. Соответсвенно его работоспособность, как и причины, по которым он фейлится, зависят от конкретной модели. К примеру для QFileSystemModel этот метод не работает вообще (так же как и removeRows, что менее логично, но тем не менее), так как не реимплементен в ней.
Абстракт модель - лишь интерфейс, пусть и наделенный определенным функционалом


Название: Re: Успешность вызова метода
Отправлено: Alex_cs_gsp от Август 29, 2010, 21:44
Returns true if the row is inserted; otherwise returns false.
Ну и с чем это азервайс связан? Я хочу знать может памяти недостаточно,  или неправильная строка указана для вставки, или еще чего-нибудь. Я взял первый попавшийся метод, просто он попался в процессе прочтения книги, вот я и захотел выяснить, почему он false может возвращать, а в справке не сказано.


Название: Re: Успешность вызова метода
Отправлено: Авварон от Август 29, 2010, 21:55
еще раз, абстрактная модель - это ИНТЕРФЕЙС. То, с чем связан otherwise, решать ВАМ в ВАШЕМ наследнике


Название: Re: Успешность вызова метода
Отправлено: Alex_cs_gsp от Август 29, 2010, 21:58
Да не в конкретике дело, знаю что такое абстрактная модель. К асистенту у меня претензии.


Название: Re: Успешность вызова метода
Отправлено: Авварон от Август 29, 2010, 22:02
в чем? напишите мне то, не знаю что? Или там должно быть написано "возвращайте код ошибки, код возвращаете false"? бред же


Название: Re: Успешность вызова метода
Отправлено: Alex_cs_gsp от Август 29, 2010, 22:04
Самое элементарное - сравнить объем описание для любого метода в мсдн и в асистенте. Мало примеров, и возвращаемые значения методов не говорят смысл ошибки и как ее исправить.


Название: Re: Успешность вызова метода
Отправлено: Авварон от Август 29, 2010, 22:09
мне почему-то информации из ассистанта достаточно, а вот где написано что name у драйва в ф-ии GetVolumeInformation (http://msdn.microsoft.com/en-us/library/aa364993(v=VS.85).aspx) это на самом деле его label, яхз


Название: Re: Успешность вызова метода
Отправлено: Alex_cs_gsp от Август 29, 2010, 22:19
В смысле, если в качестве рута указать С:\\ ?


Название: Re: Успешность вызова метода
Отправлено: Авварон от Август 29, 2010, 22:26
в том смысле что name - это метка, а rootPath - это c:\
в то время как в .net есть отдельно label, тот же rootDirectory и name, который таки буква. Зато все описания написаны в стиле кэпа - имя это имя, а метка это метка
для того чтобы выяснить эти отличия и что на самом деле возвращают методы, надо написать кучу кода (на си и c#) и расплодить дисков примонтированных в разные папки. Это я называю "плохая документация"


Название: Re: Успешность вызова метода
Отправлено: lit-uriy от Август 30, 2010, 06:15
>>Я хочу знать может памяти недостаточно,  или неправильная строка указана для вставки,
Если памяти не достаточно, я думаю, тут одним false дело не закончится.
Правильность строки нужно проверять до вызова метода.


П.С.
Для конкретной модели можно посмотреть исходник.


Название: Re: Успешность вызова метода
Отправлено: Alex_cs_gsp от Август 30, 2010, 14:14
Ну добрая половина ф-й WinApi возвращает значение, которое дает понять, что передан неверный аргумент.


Название: Re: Успешность вызова метода
Отправлено: Авварон от Август 30, 2010, 16:46
про неверный аргумент вам посяпятся сообщения в консоль - это раз
а два - в ООП языке сложно передать что-то не то