2012-02-15 19 views

答えて

2

あなたは何か間違っています。ウィジェットを無効にすると、グレー表示され、ユーザーのマウスクリックやキーボード入力は受け付けられません。

+0

私はウィジェットを無効にしません。私はQt :: ItemIsEnabledフラグなしで項目フラグを設定するだけです。 QTreeViewウィジェットはmousePressEventを受け取りますが、項目を選択しません。 –

+1

ドキュメントに明記されています:Qt :: ItemIsEnabledユーザーはアイテムと対話できます。したがって、NOTを有効に設定すると、ユーザーはアイテムと対話できず、選択も編集もできません。 – Dmitriy

+1

プログラムによる選択に役立つItemIsSelectable、unsettingもあります。 –

3

私が理解したところでは、アイテムを「無効にする」ことができますが、同時にそのアイテムを選択することができます。モデル上でそれを偽るのはかなり簡単です。

if (role == Qt::BackgroundRole){ 
    return QVariant(QApplication::palette()->color(QPalette::Inactive, QPalette::Window); 
} 

これは、アイテムを灰色で塗りつぶしますが、選択することはできます。

0

私はちょうど同様の問題を抱えていました(私は無効なアイテムをコピーする必要があります)。ここでは、(スタイルシートを無視することなく)無効なアイテムの正しいスタイルを設定するソリューションです。

モデルのカスタムアイテムデリゲートを作成します。

/// Returns false only if item needs to be rendered as disabled. 
bool isIndexEnabled(const QModelIndex &index) 
{ 
    // Implement this function. 
} 

class ItemDelegate : public QStyledItemDelegate { 
public: 
    explicit ItemDelegate(QObject *parent = nullptr) 
     : QStyledItemDelegate(parent) {} 

protected: 
    void initStyleOption(
     QStyleOptionItemView *option, const QModelIndex &index) const override 
    { 
     QStyledItemDelegate::initStyleOption(option, index); 
     if (!isIndexEnabled(index)) 
      option->state &= ~QStyle::State_Enabled; 
    } 
}; 

新しいアイテムデリゲートをモデルに設定します。

auto itemDelegate = new ItemDelegate(model) 
model->setItemDelegate(itemDelegate); 
関連する問題