crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 18.4.2024, 13:23