13

QComboBox の特定の項目のテキストの色を変更する方法がわかりません。アイテムの背景色を変更できました:

comboBox->setItemData(i, Qt::green, Qt::BackgroundRole);

Qt::ForegroundRoleまったく効果がありませんでした、Qt 4.6、Ubuntu 10.04)

スタイルシートを使用してすべてのアイテムのテキストの色を変更できましたが、特定のアイテムのテキストの色を変更する方法がわかりません。

ご協力いただきありがとうございます!

4

3 に答える 3

18

まるであなたがプロポーズしたようなものですが、役割を に変更する必要がありますQt::TextColorRole

comboBox->setItemData(0, QBrush(Qt::red), Qt::TextColorRole);  
于 2013-06-18T13:56:44.417 に答える
4

私はそれをやろうとしたことはありませんが、それを行う唯一の方法は、独自のモデルを作成し、継承QAbstractListModelし、再実装rowCount()data()、各アイテムの色を設定できる場所 (TextColorRoleロールを使用) であると思います。

そして、QComboBox::setModel()を使ってQComboBox表示させます。

アップデート

上記のソリューションを使用して、あなたが望むことを行うことができました。簡単な例を次に示します。

を継承して、独自のリストモデルを作成しましたQAbstractListModel

class ItemList : public QAbstractListModel
{
   Q_OBJECT
public:
   ItemList(QObject *parent = 0) : QAbstractListModel(parent) {}

   int rowCount(const QModelIndex &parent = QModelIndex()) const { return 5; }
   QVariant data(const QModelIndex &index, int role) const {
      if (!index.isValid())
          return QVariant();

      if (role == Qt::TextColorRole)
         return QColor(QColor::colorNames().at(index.row()));

      if (role == Qt::DisplayRole)
          return QString("Item %1").arg(index.row() + 1);
      else
          return QVariant();
   }
};

このモデルをコンボ ボックスで簡単に使用できるようになりました。

comboBox->setModel(new ItemList);

私はそれを試してみましたが、うまくいきます。

于 2010-06-18T14:39:05.293 に答える
0

これが解決策だとは思わないでください。ただし、便利な場合は、コンボボックスにQPixmap-sを使用できる場合があります。QComboBox::insertItemメソッドを見てください。

于 2010-06-19T09:02:31.040 に答える