2016-06-20 5 views
1

私はQtを学習していますが、いくつかの難しさがあります。 私はQTableWidgetを使用していた項目は、ダブルクリックし、変更行の色受け取るとき:Qt QTableViewの行のコウ

for (int j = 0; j < ui->tableWidget->horizontalHeader()->count(); j++) { 
    ui->tableWidget->item(row, j)->setForeground(color); 
} 

しかし、今、私はQTableViewを使用していますが、私はこの作業の罰金にQAbstractTableModelを作成しました。私はQSortFilterProxyModelでいくつかのフィルタを行い、問題なく動作します。 しかし、私は行の色を変更することに成功していません。

m_model.setData(m_model.index(1,2) , QColor(Qt::blue), Qt::BackgroundColorRole); 

と動作しない: 私はすでにこのようなものを試してみました。 model :: setData()では、いくつかのデバッグを書いていますが、関数を右に結合しますが、色は変更しません。

bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) 
{ 
    if (data(index, role) != value) { 
     qDebug() << index << value << role; 
     emit dataChanged(index, index, QVector<int>() << role); 
     return true; 
    } 
    return false; 
} 

デバッグ出力:

QModelIndex(1,2,0x0,MyModel(0x7fffffffe408)) QVariant(QColor, QColor(ARGB 1, 0, 0, 1)) 8 
+4

Qabstractitemmodelは独自の値を格納しません。 setData()implに選択肢を格納し、data()implの対応するインデックスの色を返す必要があります。 –

+0

@FrankOsterfeldありがとう、私はあなたの提案後にそれを作った:) –

答えて

0

あなたはビューのコンストラクタ呼び出し機能では、独自のアイテムのデリゲートを使用することができます - デリゲート再実装ペイント機能でsetItemDelegate

paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 

情報を取得QStyleOptionViewItemのジオメトリについて、 about co ntent - QModelIndex

いくつかのフラグは一例として、状態をチェックする:ダブルクリックイベント用として

if(option.state & QStyle::State_Selected) 
{ 
     painter->save(); 
     QPen pen(QColor(30, 144, 255, 255), 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); 
     int w = pen.width()/2; 
     auto rect = option.rect; 
     rect.setX(0); 
     painter->setPen(pen); 
     painter->drawRect(rect.adjusted(w,w,-w,-w)); 
     painter->restore(); 
} 

を - ビューの再実装mouseDoubleClickEvent、取得インデックス(例:indexAt(event-> POS() ))、いくつかのカラーデータを保存し、デリゲートのペイント機能でそのデータを使用します。

関連する問題