سؤال

ولدي QTreeWidget مع عمود مليئة بعض الأرقام، كيف يمكنني فرزها؟

إذا كنت تستخدم setSortingEnabled (صحيح)؛ أستطيع أن النوع بشكل صحيح سلاسل فقط، لذلك يتم فرز مقالي:

1    10    100    2    20    200

ولكن هذا ليس الشيء أريد! اقتراحات؟

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

المحلول

ويمكنك فرز تجاوز <المشغل وتغيير نوع CONDICTION من هذا القبيل.

class TreeWidgetItem : public QTreeWidgetItem {
  public:
  TreeWidgetItem(QTreeWidget* parent):QTreeWidgetItem(parent){}
  private:
  bool operator<(const QTreeWidgetItem &other)const {
     int column = treeWidget()->sortColumn();
     return text(column).toLower() < other.text(column).toLower();
  }
};

في هذا المثال أنه تجاهل القضية الحقيقية، التي تواجه الحقول في وضع صغيرة.

نصائح أخرى

إليك التنفيذ باي كيوت باستخدام __lt__

class TreeWidgetItem(QtGui.QTreeWidgetItem):

    def __init__(self, parent=None):
        QtGui.QTreeWidgetItem.__init__(self, parent)

    def __lt__(self, otherItem):
        column = self.treeWidget().sortColumn()
        return self.text(column).toLower() < otherItem.text(column).toLower()

وأفضل وسيلة وجدت لاستخدام كتلة محاولة للعثور على أرقام

class TreeWidgetItem( QtGui.QTreeWidgetItem ):
    def __init__(self, parent=None):
        QtGui.QTreeWidgetItem.__init__(self, parent)

    def __lt__(self, otherItem):
        column = self.treeWidget().sortColumn()
        try:
            return float( self.text(column) ) > float( otherItem.text(column) )
        except ValueError:
            return self.text(column) > otherItem.text(column)

وأرقام الترتيب حسب قيمة رقمية، ولكن سلاسل فرز الطريق المعاكس (أي "19999" < "2").

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

"19"[0] != "121"[0] ? // no
"19"[1] != "121"[1] ? // yes
     '9' > '2' ?      // yes
          return some value that indicates "19" greater than "121";

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

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