2009-08-25 24 views
9

QSqlTableModelでQTableViewを作成しました。 標準では、セルをダブルクリックするとそのセルがマークされ、ユーザーはそれらを編集できます。 私は、ユーザーがそれをすることは許されないと思っています。彼は単一のセルをクリックして行全体をマークすることができますが、セルを編集することはできません。 どうすればいいですか?テーブル項目のItemIsEditableビットオフQTableView - ユーザーがセルを編集できないようにする

table->setEditTriggers(QAbstractItemView::NoEditTriggers); 

答えて

17

あなたはすべてをコーディングやデザイナーで物事をやっているかどうかによっては、

  • 任意に設定selectionModeQAbstractItemView::SingleSelectionからQAbstractItemView::SelectRowsQAbstractItemView::NoEditTriggers
  • selectionBehavior

    • editTriggersを設定しましたユーザーが正確に1つの行を選択したい場合は

    テーブルビューオブジェクトに適切な呼び出しは、すべてのあなたはそれがQAbstractItemView :: NoEditTriggers、QAbstractItemView :: SelectRowsとQAbstractItemViewと呼ばれていますAbstractItemViewセクション

  • +0

    でこれらのオプションを見つけることができますデザイナーでset例えばsetEditTriggers()を前置されます:: SingleSelection、それは私が探していたものです。ありがとうございました! – Berschi

    8

    はこれを試してみてください。

    void QAbstractItemView::setItemDelegate (QAbstractItemDelegate * delegate) 
    

    そしてthisの例のようにQItemDelegateから継承するクラスを作成します。例えば:

    QTableWidgetItem* item = new QTableWidgetItem(...); 
    ... 
    item->setFlags(item->flags() &= ~Qt::ItemIsEditable); 
    
    2

    トグル:

    1

    理想的には、使用したいと思うでしょう。

    QWidget * QItemDelegate::createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const 
    

    リターンNULL

    または使用持っているあなたのクラスの編集:QAbstractItemView::SelectRows

    :あなたはまた、パラメータを使用すると

    void setSelectionBehavior (QAbstractItemView::SelectionBehavior behavior) 
    

    を見てみたいと思うでしょう

    table->setEditTriggers(QAbstractItemView::NoEditTriggers); 
    

    を参考のため

    http://doc.trolltech.com/4.5/qtableview.html

    関連する問題