سؤال

افتراضيا QTreeWidget يدير اختيار الصفوف (عند النقر فوق صف، فهو يبرزه، عند النقر فوق صف آخر، يسلط الضوء على ذلك ويحلل من الصف السابق)، لا أريد هذا ولا أستطيع معرفة كيفية إيقاف تشغيله.

هل كانت مفيدة؟

المحلول

يمكنك استخدام setSelectionMode التابع QAbstractItemView فئة (والتي QTreeWidget يرث من) لتعيين أي وضع اختيار للمكون. شيء من هذا القبيل (عذرا، رمز في C ++):

yourtreeView->setSelectionMode(QAbstractItemView::NoSelection);

في هذه الحالة، لن يتم تحديد العناصر ولكنك ما زلت سترى التركيز المستطيل من حولها. لإصلاح هذا، يمكنك تعيين القطعة الخاصة بك إلى عدم قبول التركيز عن طريق الاتصال:

yourtreeView->setFocusPolicy(Qt::NoFocus);

إذا كان على القطعة الشجرة الخاصة بك أن تقبل التركيز ولكن يجب ألا تكون رسم مستطيلات التركيز يمكنك استخدام مفوض العنصر المخصص وإزالة State_HasFocus الدولة من حالة البند قبل رسمها. شيء من هذا القبيل:

class NoFocusDelegate : public QStyledItemDelegate
{
protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
};

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
    QStyleOptionViewItem itemOption(option);
    if (itemOption.state & QStyle::State_HasFocus)
        itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
    QStyledItemDelegate::paint(painter, itemOption, index);
}

....

NoFocusDelegate* delegate = new NoFocusDelegate();
yourtreeView->setItemDelegate(delegate);

نصائح أخرى

شكرا للإجابة أعلاه، وأعتقد أن إصدار بيثون هو (^ ^):

yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top