سؤال

قمت بإنشاء 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

كمرجع:http://doc.trolltech.com/4.5/qtableview.html.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top