QtableView - عدم السماح للمستخدم بتحرير الخلية
-
19-09-2019 - |
سؤال
قمت بإنشاء QtableView مع QSQLTableModel. من خلال قياسي، فإن النقر المزدوج على الخلايا سيمرسها ويستخدم المستخدم تحريرها. أريد، أن المستخدم لا يسمح له بذلك. يسمح له بمناسبة الصف بأكمله بالنقر فوق خلية واحدة، ولكن ليس لتحرير الخلية. كيف أقوم بذلك؟
المحلول
اعتمادا على ما إذا كنت تقوم بترميز كل شيء أو القيام بالأشياء في المصمم، حدد
editTriggers
لQAbstractItemView::NoEditTriggers
selectionBehavior
لQAbstractItemView::SelectRows
- اختياريا اختيار
selectionMode
لQAbstractItemView::SingleSelection
إذا كنت تريد المستخدم تحديد صف واحد بالضبط
في كائن TableView، سيتم بادئة المكالمات المناسبة set
على سبيل المثال setEditTriggers()
في المصمم، يمكنك العثور على هذه الخيار في AbstractItemView
الجزء
نصائح أخرى
جرب هذا:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
تبديل قبالة عنصر الجدول ItemIsEditable
قليل. على سبيل المثال:
QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
من الناحية المثالية، سوف ترغب في استخدامها:
void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )
ثم قم بإنشاء فئة يرث من QItemDelegate
كما هو الحال في هذه مثال. تحرير صفك ليكون
QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
إرجاع NULL
او استعمل:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
سوف تريد أيضا أن ننظر في
void setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )
مع المعلمة: QAbstractItemView::SelectRows