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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Успешность вызова метода  (Прочитано 6658 раз)
Alex_cs_gsp
Гость
« : Август 28, 2010, 19:07 »

Я столкнулся с тем, что не всегда понимаю нужно ли проверять возвращаемое методом значение или нет, и как на него реагировать.
Например, метод bool QAbstractItemModel::insertRows().
Я Qt только учусь, но программил WinAPi/MFC. В мсдн всегда указываются причины, которые приводили к ошибке, для таких вроде бы безобидных функций - то ли не удается выделить память, то-ли передан нулевой указатель...., и уже на основе этого принимается решение, то ли завершить программу, то ли должен как-то отреагировать пользователь и т.п.
Как тут???
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 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.
Чего не понятно?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Август 29, 2010, 21:34 »

по умолчанию, этот метод ничего не делает, как я уже вам писал. Соответсвенно его работоспособность, как и причины, по которым он фейлится, зависят от конкретной модели. К примеру для QFileSystemModel этот метод не работает вообще (так же как и removeRows, что менее логично, но тем не менее), так как не реимплементен в ней.
Абстракт модель - лишь интерфейс, пусть и наделенный определенным функционалом
« Последнее редактирование: Август 29, 2010, 21:39 от Авварон » Записан
Alex_cs_gsp
Гость
« Ответ #3 : Август 29, 2010, 21:44 »

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

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Август 29, 2010, 21:55 »

еще раз, абстрактная модель - это ИНТЕРФЕЙС. То, с чем связан otherwise, решать ВАМ в ВАШЕМ наследнике
Записан
Alex_cs_gsp
Гость
« Ответ #5 : Август 29, 2010, 21:58 »

Да не в конкретике дело, знаю что такое абстрактная модель. К асистенту у меня претензии.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Август 29, 2010, 22:02 »

в чем? напишите мне то, не знаю что? Или там должно быть написано "возвращайте код ошибки, код возвращаете false"? бред же
Записан
Alex_cs_gsp
Гость
« Ответ #7 : Август 29, 2010, 22:04 »

Самое элементарное - сравнить объем описание для любого метода в мсдн и в асистенте. Мало примеров, и возвращаемые значения методов не говорят смысл ошибки и как ее исправить.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Август 29, 2010, 22:09 »

мне почему-то информации из ассистанта достаточно, а вот где написано что name у драйва в ф-ии GetVolumeInformation (http://msdn.microsoft.com/en-us/library/aa364993(v=VS.85).aspx) это на самом деле его label, яхз
Записан
Alex_cs_gsp
Гость
« Ответ #9 : Август 29, 2010, 22:19 »

В смысле, если в качестве рута указать С:\\ ?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Август 29, 2010, 22:26 »

в том смысле что name - это метка, а rootPath - это c:\
в то время как в .net есть отдельно label, тот же rootDirectory и name, который таки буква. Зато все описания написаны в стиле кэпа - имя это имя, а метка это метка
для того чтобы выяснить эти отличия и что на самом деле возвращают методы, надо написать кучу кода (на си и c#) и расплодить дисков примонтированных в разные папки. Это я называю "плохая документация"
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Август 30, 2010, 06:15 »

>>Я хочу знать может памяти недостаточно,  или неправильная строка указана для вставки,
Если памяти не достаточно, я думаю, тут одним false дело не закончится.
Правильность строки нужно проверять до вызова метода.


П.С.
Для конкретной модели можно посмотреть исходник.
« Последнее редактирование: Август 30, 2010, 06:18 от lit-uriy » Записан

Юра.
Alex_cs_gsp
Гость
« Ответ #12 : Август 30, 2010, 14:14 »

Ну добрая половина ф-й WinApi возвращает значение, которое дает понять, что передан неверный аргумент.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #13 : Август 30, 2010, 16:46 »

про неверный аргумент вам посяпятся сообщения в консоль - это раз
а два - в ООП языке сложно передать что-то не то
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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