Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2008, 00:59   #1
theShadow
Новичок
Джуниор
 
Регистрация: 12.09.2008
Сообщений: 2
По умолчанию Пара вопросов по QDevelop и не только

звиняйте не туда запостил, каюсь
копался по разделам, перепутал таб

Здрасте!

я новичок, программировать только начинаю (есть опыт с VB .NET - уж лучше бы его не было, только мешает).

на данный момент есть конкретная цель - написать себе простенькую утилиту для сортировки своей музыкальной библиотеки по тегам. что буду использовать:

QT4 (то бишь графический интерфейс, пусть и пока самый базовый)
TagLib (библиотека для работы с тегами музыкальных файлов)

среда разработки - QDevelop

с С++ я знаком плохо, поэтому в случае чего сильно не бейте...

итак, чтобы использовать в своем "проэкте" TagLib мне нужно: ?

сначала я думал, что нужно просто добавить его заголовки в INCLUDEPATH, что я и сделал.

руководствуясь примерами, идущими с TagLib, я прямо скопировал следующий код:

Код:
<стандартная лабуда>
#include <fileref.h>
#include <tag.h>
<стандартная лабуда>
TagLib::FileRef f(argv[i]);
<выход из приложения>
просто чтобы протестировать будет ли работать, пока с обьектом ничего не делал. путем некоторых изысканий выяснил, что данное обьявление работает только если обьявить using namespace TagLib (т. е. заголовочные файлы TagLib'а используют именно это пространство имен). теперь вопрос - а нужно ли оно? может есть какой то другой способ подключить TagLib к "проэкту"?

ЗЫ странно, что в коде "примера", с которого я копипастил код, обьявлено std и все нормально работает. наверное я чего то не понимаю

EDIT:

с пространствами имен разобрался, теперь проблема в другом.

компилятор выдает:
Код:
main.cpp:(.text+0xcc): undefined reference to TagLib::FileRef::FileRef(char const*, bool, TagLib::AudioProperties::ReadStyle)
main.cpp:(.text+0xd4): undefined reference to TagLib::FileRef::isNull() const
main.cpp:(.text+0x15a): undefined reference to TagLib::FileRef::~FileRef()
main.cpp:(.text+0x184): undefined reference to TagLib::FileRef::tag() const
main.cpp:(.text+0x194): undefined reference to TagLib::FileRef::tag() const
main.cpp:(.text+0x1e1): undefined reference to TagLib::FileRef::~FileRef()
EDIT 2:

с этим я тоже справился, надо было подключить libtag.so в LIBS.

теперь у меня совсем глупая проблема. открывается QFileDialog, выбирается файл, выбраный файл передается TagLib::FileRef. Там все нормально, только теперь не могу привести TagLib::String к типу QString.?

вот так это выглядит в примере к TagLib:
Код:
      TagLib::Tag *tag = f.tag();

      cout << "-- TAG --" << endl;
      cout << "title   - \"" << tag->title()   << "\"" << endl;
      cout << "artist  - \"" << tag->artist()  << "\"" << endl;
как мне сделать то же самое, только переконвертить полученное в QString?

EDIT 3:

почитал документацию к TagLib, вроде работает со следующим кодом:
Код:
QFileDialog fd; //создаем диалог
	TagLib::FileRef f(fd.getOpenFileName()); //получаем имя файла и передаем его TagLib
	TagLib::Tag *tag = f.tag(); //создаем обьект tag
	QString s(tag->title().toCString()); //конвертируем поле title в std::string или как его там
	QMessageBox mb;
	mb.setText(s);
	mb.setCaption(s);
	mb.exec();// показываем результат
EDIT 4:

работать оно работает, только со включенным флагом qt3support - а мне оно не надо, я хочу на чистом QT4. сейчас снова маюсь с приведением типов, на этот раз мне надо привести QString к const char *.

EDIT 5:

разум победил.

Код:
	QFileDialog fd;										//файловый диалог
	TagLib::FileRef f(fd.getOpenFileName().toAscii().data());

				/*конвертируем имя файла, выбранного в диалоге
				(проверку потом повешу) в char *, посредством приведения QString в
				QByteArray через toAscii(), а затем QByteArray в char * через data().*/

	TagLib::Tag *tag = f.tag();							//создаем обьект, содержащий теги файла
	QMessageBox mb;										// no comments
	mb.setText(tag->title().toCString());				// конвертим тег в std::string и передаем его в QMessageBox
	mb.exec();											//показываем сообщение с тегом

Последний раз редактировалось theShadow; 12.09.2008 в 18:19.
theShadow вне форума Ответить с цитированием
Старый 19.01.2009, 01:49   #2
bohdan4ik
Рэдиска
Форумчанин
 
Регистрация: 10.09.2008
Сообщений: 250
По умолчанию

Вы прослушали диалог с участием theShadow и Умного Человека :D
bohdan4ik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пара вопросов [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 18.04.2008 14:28
Пара вопросов... ~N@um~ Помощь студентам 6 14.07.2007 09:49
Пара вопросов. Kukkk Общие вопросы Delphi 5 03.07.2007 11:40
Пара вопросов xak2 Общие вопросы Delphi 6 08.05.2007 20:58
пара вопросов Trooper Общие вопросы Delphi 3 05.11.2006 17:56