に関連するアイコンを表示する必要があるアプリケーションを開発中です。
例:.doc拡張子を表示するには、Microsoft Wordアイコンを表示する必要があります。ファイル拡張子を指定してQtアイコン(QIcon)を取得する方法
QUESTION:
がどのように私は何とかQT SDKに
感謝を使用してシステムからQIconを得ることができます。
に関連するアイコンを表示する必要があるアプリケーションを開発中です。
例:.doc拡張子を表示するには、Microsoft Wordアイコンを表示する必要があります。ファイル拡張子を指定してQtアイコン(QIcon)を取得する方法
QUESTION:
がどのように私は何とかQT SDKに
感謝を使用してシステムからQIconを得ることができます。
QtGui.QFileIconProviderクラスを使用してください。
Qt5ので、そのためにQMimeDatabaseを使用します。
QMimeDatabase mime_database;
QIcon icon_for_filename(const QString &filename)
{
QIcon icon;
QList<QMimeType> mime_types = mime_database.mimeTypesForFileName(filename);
for (int i=0; i < mime_types.count() && icon.isNull(); i++)
icon = QIcon::fromTheme(mime_types[i].iconName());
if (icon.isNull())
return QApplication::style()->standardIcon(QStyle::SP_FileIcon);
else
return icon;
}
あなたは特別な要件を持っていない場合は、QMimeDatabase
はあなたの必要性のためのより良い選択です。 @ nitro2005の答えを試してみることをお勧めします。 QFileIconProvider
を使ってこの作業を手で行うことはできます。
あなたの手でこの作業をしたいが何らかの理由でQMimeDatabase
を使用できない場合は、Linux/X11の解決策があります。 QFileInfo(const QString &file)
を使用して、ファイルの接尾辞/拡張子を取得することができます(QFileInfo
コンストラクタに渡されたQStringは存在するパスかどうかを確認する必要はありません)。最後にMIMEタイプを取得してください。最後にQIconを取得できます。 QIcon::fromTheme
を使用して完了です。
たとえば、次のコードでは、ファイルの接尾辞が ".bin"かどうかを確認します。システムのテーマから "application-x-executable" MIMEタイプのアイコンを表示します。実際には、それはあなたの自己によってMIMEデータベースを維持するだけです。
QString fileName("example.bin");
QFileInfo fi(fileName);
if (fi.suffix().compare(QString("bin")) == 0) {
item->setIcon(QIcon::fromTheme("application-x-executable",
provider.icon(QFileIconProvider::File)));
}
あなたの「MIMEデータベース」のMIMEタイプ文字列の参照を取得するには、freedesktop icon naming specをチェックアウトしてください。
パフォーマンスに関するヒント。これらのアイコンを頻繁に提供する必要がある場合は、QFileIconProviderのローカルインスタンスを1つ作成します。 QFileIconProviderの構築は重い –