PDA

View Full Version : SubClass QFileIconProvider (from QDirModel) not compile....



patrik08
29th March 2007, 11:15
Why i can not subclass QFileIconProvider

waht is mistake? on qt_metacast moc error moc exist.....


debug\moc_user_file.cpp:37: error: `staticMetaObject' is not a member of `QFileI
conProvider'
debug\moc_user_file.cpp: In member function `virtual void* ImIconProvider::qt_me
tacast(const char*)':
debug\moc_user_file.cpp:51: error: `qt_metacast' is not a member of `QFileIconPr
ovider'
debug\moc_user_file.cpp: In member function `virtual int ImIconProvider::qt_meta
call(QMetaObject::Call, int, void**)':
debug\moc_user_file.cpp:56: error: `qt_metacall' is not a member of `QFileIconPr
ovider'
mingw32-make[1]: *** [debug\moc_user_file.o] Error 1





class ImIconProvider : public QFileIconProvider
{
Q_OBJECT

QStringList file_image;
QStringList file_text;
QStringList file_other;
public:
ImIconProvider(QWidget *pa);
~ImIconProvider() {};
const QIcon icon( const QFileInfo & fi );
};

ImIconProvider::ImIconProvider(QWidget* = 0)
{
/* setup extension list to use */
file_image.clear();
file_text.clear();
file_other.clear();
file_image << "eps" << "gif" << "png" << "jpg" << "jpeg" << "xpm" << "tif" << "tiff" << "bmp" << "pbm" << "pgm" << "ppm" << "xbm" << "xpm" << "psd";
file_text << "txt" << "cpp" << "h" << "dat" << "conf" << "ini" << "rtf" << "fos" << "xml" << "htm" << "html" << "css" <<"js";
file_other << "pdf" << "doc" << "pdf" << "exe" << "rar" << "bz" << "tar" << "gz" << "zip";
}

const QIcon ImIconProvider::icon(const QFileInfo &fi)
{
const QString ext = fi.suffix().toLower();
if (file_image.contains(ext)) {
return QIcon("image.png");
} else if (file_image.contains(ext)) {
return QIcon("text.png");
} else if (file_image.contains(ext)) {
return QIcon("other.png");
} else {
return QIcon("unknow.png");
}
/* end icon s*/
}








i append setIconProvider


modeluser = new QDirModel;
modellocal = new QDirModel;
setAcceptDrops(true);
Q_ASSERT(pcsis);
modeluser->setIconProvider(pcsis);


modellocal->setResolveSymlinks(false);
modeluser->setResolveSymlinks(false);
usertree->setModel(modeluser);
mlocal->setModel(modellocal);

viking
29th March 2007, 11:47
Why i can not subclass QFileIconProvider

waht is mistake? on qt_metacast moc error moc exist.....


debug\moc_user_file.cpp:37: error: `staticMetaObject' is not a member of `QFileI
conProvider'
debug\moc_user_file.cpp: In member function `virtual void* ImIconProvider::qt_me
tacast(const char*)':
debug\moc_user_file.cpp:51: error: `qt_metacast' is not a member of `QFileIconPr
ovider'
debug\moc_user_file.cpp: In member function `virtual int ImIconProvider::qt_meta
call(QMetaObject::Call, int, void**)':
debug\moc_user_file.cpp:56: error: `qt_metacall' is not a member of `QFileIconPr
ovider'
mingw32-make[1]: *** [debug\moc_user_file.o] Error 1





class ImIconProvider : public QFileIconProvider
{
Q_OBJECT

QStringList file_image;
QStringList file_text;
QStringList file_other;
public:
ImIconProvider(QWidget *pa);
~ImIconProvider() {};
const QIcon icon( const QFileInfo & fi );
};

ImIconProvider::ImIconProvider(QWidget* = 0)
{
/* setup extension list to use */
file_image.clear();
file_text.clear();
file_other.clear();
file_image << "eps" << "gif" << "png" << "jpg" << "jpeg" << "xpm" << "tif" << "tiff" << "bmp" << "pbm" << "pgm" << "ppm" << "xbm" << "xpm" << "psd";
file_text << "txt" << "cpp" << "h" << "dat" << "conf" << "ini" << "rtf" << "fos" << "xml" << "htm" << "html" << "css" <<"js";
file_other << "pdf" << "doc" << "pdf" << "exe" << "rar" << "bz" << "tar" << "gz" << "zip";
}

const QIcon ImIconProvider::icon(const QFileInfo &fi)
{
const QString ext = fi.suffix().toLower();
if (file_image.contains(ext)) {
return QIcon("image.png");
} else if (file_image.contains(ext)) {
return QIcon("text.png");
} else if (file_image.contains(ext)) {
return QIcon("other.png");
} else {
return QIcon("unknow.png");
}
/* end icon s*/
}








i append setIconProvider


modeluser = new QDirModel;
modellocal = new QDirModel;
setAcceptDrops(true);
Q_ASSERT(pcsis);
modeluser->setIconProvider(pcsis);


modellocal->setResolveSymlinks(false);
modeluser->setResolveSymlinks(false);
usertree->setModel(modeluser);
mlocal->setModel(modellocal);

try running moc on your Header file and include it in your project...

viking
29th March 2007, 11:48
try running moc on your Header file and include it in your project...
ex:


moc your_Header.h -o moc_your_Header.cpp

wysota
29th March 2007, 12:00
QFileIconProvider is not a QObject, so you can't use Q_OBJECT with it.

aamer4yu
29th March 2007, 12:01
oh ho.... didnt think of that :(

viking
29th March 2007, 12:36
QFileIconProvider is not a QObject, so you can't use Q_OBJECT with it.
hi wysota, could you elaborate?

aamer4yu
29th March 2007, 12:56
Q_OBJECT can be used with those classes which are derived from QObject at any level.

as QFileIconProvider is not derived from QObject, it cannot be used with Q_OBJECT.

patrik08
29th March 2007, 12:59
QFileIconProvider is not a QObject, so you can't use Q_OBJECT with it.


if i remove Q_OBJECT can compile but not running...! and not display my icons..

i put Q_OBJECT why? on scribus apps having....

http://stuff.mit.edu/afs/athena/software/scribus_v1.3/include/scribus/customfdialog.h

maybe is qt3 ... i dont no..


#include "scribusapi.h"

/**
*@author Franz Schmid
*/
class SCRIBUS_API ImIconProvider : public QFileIconProvider
{
Q_OBJECT
QStringList fmts;
QPixmap imagepm;
QPixmap docpm;
QPixmap pspm;
QPixmap pdfpm;





i put so... and default icon is here ...

modeluser = new QDirModel();
modeluser->setIconProvider(new ImIconProvider());
modeluser->setResolveSymlinks(false);
usertree->setModel(modeluser);
modeluser->setSupportedDragActions(Qt::CopyAction);
usertree->setDragEnabled(true);
usertree->setRootIndex(modeluser->index(ustart));

i can drag file direct to desktop (on model or outsite model) or viceversa .. is running rename delete , open file on clicked all running .. only the icon is fake....

http://ppk.ciz.ch/qt_c++/dirmodel2.png










class ImIconProvider : public QFileIconProvider
{
public:
QStringList file_image;
QStringList file_text;
QStringList file_other;
ImIconProvider();
~ImIconProvider() {};
QIcon icon( const QFileInfo & fi );
QIcon icon( IconType type );
};

ImIconProvider::ImIconProvider()
{
file_image.clear();
file_text.clear();
file_other.clear();
file_image << "eps" << "gif" << "png" << "jpg" << "jpeg" << "xpm" << "tif" << "tiff" << "bmp" << "pbm" << "pgm" << "ppm" << "xbm" << "xpm" << "psd";
file_text << "txt" << "cpp" << "h" << "dat" << "conf" << "ini" << "rtf" << "fos" << "xml" << "htm" << "html" << "css" <<"js";
file_other << "pdf" << "doc" << "pdf" << "exe" << "rar" << "bz" << "tar" << "gz" << "zip";
}

QIcon ImIconProvider::icon(const QFileInfo &fi)
{
qDebug() << "### filename " << fi.fileName(); /* nothing comming!! */

const QString ext = fi.suffix().toLower();
if (file_image.contains(ext)) {
return QIcon("image.png");
} else if (file_image.contains(ext)) {
return QIcon("text.png");
} else if (file_image.contains(ext)) {
return QIcon("other.png");
} else {
return QIcon("other.png");
}
/* end icon s*/
}

QIcon ImIconProvider::icon( IconType type )
{
return QIcon("other.png");
}

patrik08
29th March 2007, 13:31
QFileDialog display correct all icon (QDirModel NO!) .... so if you take QFileIconProvider from QFileDialog

and done to model this is not running ... i suppose a BUG!




#include <QtGui>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QDirModel model;
model.setIconProvider(QFileDialog::iconProvider()) ;
QTreeView tree;
tree.setModel(&model);
tree.setWindowTitle(QObject::tr("Dir View"));
tree.resize(640, 480);
tree.show();

return app.exec();
}

patrik08
29th March 2007, 13:41
i found bugs.... :)
http://www.trolltech.com/developer/task-tracker/index_html?method=entry&id=139120
now build & 4.3.0 and take easy a break..