crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Не переопределяется QIODevice::isOpen()
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kerdster Дата 8.7.2011, 9:29
  Уф, разобрался в чём дело.
Проглядел что в документации функция isOpen() не виртуальная в классе QIODevice, следовательно при передаче в phonon вызывалась функция базового класса. В документации написано:
Цитата
Returns true if the device is open; otherwise returns false. A device is open if it can be read from and/or written to. By default, this function returns false if openMode() returns NotOpen.

Следовательно добавил в свой класс просто:
bool netSource::open(OpenMode mode)
{
    qDebug() << "NS: Open!";
    this->is_opened = true;
    [b]this->setOpenMode(mode);[/b]
    return true;
}

И вуаля! Спасибо за внимание и желание помочь))
RazrFalcon Дата 7.7.2011, 21:25
  У меня х32 Arch

В остальном: без понятия, так как не могу повторить багу.
kerdster Дата 7.7.2011, 21:14
 
Цитата(RazrFalcon @ 7.7.2011, 16:48) *
Не совсем понял в чем проблема, но у меня не падает. <_<

Думал проблема действительно в каком-то баге, но на другой машине проблема осталась та же:
$ out/phonon-net 
Start play:  "ololol" 
SRC: is Open 
NS: Open! 
ASSERT: "ioDevice->isOpen()" in file /builddir/build/BUILD/phonon-4.5.0/phonon/iodevicestream.cpp, line 43
Аварийный останов (core dumped)


Смотрел в код, указанный в сообщении ACCERT, и там совершенно честно:
Q_ACCERT(ioDevice->isOpen())

Что очень странно, ведь у меня она возвращает true. Я вот не могу понять, может с переопределением в наследовании накосячил?

Собиралось и запускалось всё добро на Qt 4.6.3/Fedora 13 и Qt 4.7.2/Fedora 14, обе 32х битные.

З.Ы. - У вас почему-то нет вывода в Debug второй раз сообщения "SRC: is Open", хотя он должен быть (см. в ошибке: /phonon/iodevicestream.cpp, line 43).
RazrFalcon Дата 7.7.2011, 15:48
  Не совсем понял в чем проблема, но у меня не падает. <_<

Лог:
Раскрывающийся текст
Start play:  "ololol" 
SRC: is Open 
NS: Open! 
NS: Seek:  0 
WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/MediaController.cpp 355 Phonon-MPlayer subtitleAdded 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/MediaController.cpp 394 Phonon-MPlayer subtitleChanged New current subtitle: "None" 
socket(): Address family not supported by protocol
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 180 Phonon-MPlayer objectDescriptionIndexes 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 212 Phonon-MPlayer objectDescriptionProperties 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 256 Phonon-MPlayer startConnectionChange 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 258 Phonon-MPlayer startConnectionChange Node: Phonon::MPlayer::AudioOutput 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 258 Phonon-MPlayer startConnectionChange Node: Phonon::MPlayer::MediaObject 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 268 Phonon-MPlayer connectNodes Phonon::MPlayer::MediaObject Phonon::MPlayer::AudioOutput 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 329 Phonon-MPlayer endConnectionChange 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 331 Phonon-MPlayer endConnectionChange Node: Phonon::MPlayer::AudioOutput 
QP_LOGGER /tmp/yaourt-tmp-razrfalcon/aur-phonon-mplayer-git/src/phonon-mplayer/mplayer/Backend.cpp 331 Phonon-MPlayer endConnectionChange Node: Phonon::MPlayer::MediaObject
kerdster Дата 7.7.2011, 13:17
  Добрый день.
Проблема состоит в следующем - необходимо сделать производный класс от QIODevice для использования его в Phonon.
Всё бы хорошо, но столкнулся со странной проблемой - не удаётся переопределить в производном классе метод isOpen().

Объявление:
class netSource : public QIODevice
{
Q_OBJECT
public:
    explicit netSource(QObject *parent = 0);
    bool isOpen() const;
    ....
}


Определение:
bool netSource::isOpen() const
{
    qDebug() << "SRC: is Open";
    return true;
}


Пример кода:
netSource *src = new netSource(this);
    
src->isOpen(); // Работает!

Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
mediaObject->setCurrentSource(Phonon::MediaSource(src)); // Падение! ASSERT: "ioDevice->isOpen()" in file /builddir/build/BUILD/phonon-4.4.3/phonon/iodevicestream.cpp, line 43


Там, где срабатывает ASSERT моя функция НЕ вызывается, в первом случае вывод в дебаг есть, а во втором нет.

Что за фигня такая странная? Исходники проекта прикрепил.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 7:43