QT排序模型并在表格视图中显示

时间:2016-03-30 09:22:34

标签: c++ qt sorting tableview

我必须为模型创建自己的类(实现拖动)(现在它使用MyTableItem列表)和标题(处理点击列)

查看:

class DragTableView : public QTableView
{
public:
    DragTableView(QWidget *parent = 0);
    void Initialzie(Overseer *Overseer);

protected:
    void mouseMoveEvent(QMouseEvent *event);

private:
    void performDrag();
};

标题

class ClickableHeaderView : public QHeaderView
{
Q_OBJECT
public:
      ClickableHeaderView(ObjectMaster* Master);
      ~ClickableHeaderView(){};


public slots:
      void sectionClicked(int index);
};

型号:

class CustomModelOfCustomObjects : public QAbstractTableModel
{
    Q_OBJECT
public:
    CustomModelOfCustomObjects();

    //(...) 
    ///SOME FUNCTIONS LIKE ADDING ITEM, REMOVING IT, ETC

    int rowCount(const QModelIndex &parent) const;
    int columnCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &index, int role) const;

    bool insertRows(int position, int rows, const QModelIndex &index);

    QVariant headerData(int section, Qt::Orientation orientation, int role) const;

private:
    QList <MyTableItem> listOfObjects;
};

MyTableItem只是一个包含少量QStrings和ints来表示数据的类。

我处理鼠标单击确定,将信息进一步传递给我的Overseer类,它存储模型(并将指针指向表视图)并设法使用此kKeep进行排序,此函数为Model&# 39; s函数):

//Example for sorting by "Name"
void sortItemsBy_Name()
{
    qSort(listOfObjects.begin(), listOfObjects.end(), compare_Names);
}

bool compare_Names(MyTableItem &v1, MyTableItem &v2)
{
    int result = QString::localeAwareCompare(v1.get_Name() , v2.get_Name());
    if(result >0)
    return true;
    else
    return false;
}
直到这一刻,这一切都很好。列表排序正确,但显示的内容 - 不是。我试着用:

emit dataChanged(QModelIndex(), QModelIndex());

它刷新了TableView的显示,但是每个元素都处于错误的位置,而在列表中 - 一切都很好(我在调试中检查过)。

编辑1: Sorting Qt Table Model - QTableView doesn't get updated中提出的解决方案没有做到这一点。

编辑2: 我注意到我的表格视图看起来完全一样 - 如果我使用layoutAboutToBeChanged / dataChanged / NOTHING。

1 个答案:

答案 0 :(得分:0)

我解决了。结果证明强迫repaint()有效,但也不是最佳解决方案。我搜索了“之前的”功能,我注意到break; case switchfilter { if [type] == "pat" { grok { match => { "message" => "%{TIMESTAMP_ISO8601:time} %{LOGLEVEL:loglevel} \[%{JAVACLASS:class}] %{GREEDYDATA:mydata}" } } date { match => [ "time" , "YYYY-MM-dd HH:mm:ss,SSS" ] } } } 内缺少2016-03-08 15:26:45,111 INFO [ch.fhnw.imvs.pat.integration.adapter.vcs.GitAdapter] - gitweb.conf updated