3

QTreeWidgetwithアイテムがありQTreeWidgetItemますが、ルートノードのみがアイコンを表示しています。

ここに画像の説明を入力してください

私はそれをオフにすることができるものに頭を悩ませてきました、何かヒントはありますか?

  ui->folderTree1->setUpdatesEnabled( false );

  QTreeWidgetItem* treeRoot1 = new QTreeWidgetItem(ui->folderTree1);
  treeRoot1->setIcon(0, QIcon(":/icons/black.png"));
  treeRoot1->setText(0, tr("Root"));
  treeRoot1->setExpanded(true);
  addFoldersToTreeView(treeRoot1, ui->filePath1->text(), ui->filePath2->text());

  ui->folderTree1->setUpdatesEnabled( true );
}

void MainWindow::addFoldersToTreeView(QTreeWidgetItem* currentWidget, QString leftPath, QString rightPath)
{
  qDebug() << "MainWindow::addFoldersToTreeView" << leftPath;
  QDir dir(leftPath);
  QDir dir2(rightPath);
  /* Add the folders */
  foreach (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
  {
    QString sImageName = ":/icons/black.png";
    QTreeWidgetItem* newItem = new QTreeWidgetItem(currentWidget);
    qDebug() << "MainWindow::addFoldersToTreeView.sImageName" << sImageName;
    newItem->setIcon(0, QIcon(sImageName));
    newItem->setText(0, subDir);
    newItem->setExpanded(true);
    newItem->setData(0, 1, QVariant(leftPath + QDir::separator() + subDir));
    /* Recursively add sub-folders */
    addFoldersToTreeView(newItem, leftPath + QDir::separator() + subDir, rightPath + QDir::separator() + subDir);
  }
4

1 に答える 1

6

問題は次の行です。

newItem->setData(0, 1, QVariant(leftPath + QDir::separator() + subDir));

2番目の引数は、1(Qt :: DecorationRole)に指定するアイテムデータロールです。Qt :: DecorationRoleは、アイコンの形で装飾としてレンダリングされるデータに使用する必要があります。つまり、この行により、前に指定したアイコンがQVariantオブジェクトに置き換えられます。

その行を削除するか、アイテムデータの役割を別のものに変更してください。

于 2013-02-20T14:55:08.497 に答える