gpt4 book ai didi

c++ - QT排序模型并在表格 View 中显示

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:24 25 4
gpt4 key购买 nike

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

查看:

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 只是一个包含一些 QString 和表示数据的整数的类。

我处理鼠标单击 ok,将信息进一步传递给我的 Overseer 类,它存储模型(并将指向它的指针提供给 TableView )并设法用这个 kKeep 记住,这个函数是模型的函数):

//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:我注意到我的表格 View 看起来完全一样 - 如果我使用 layoutAboutToBeChanged/dataChanged/NOTHING。

最佳答案

我解决了。事实证明,强制 repaint() 可行,但也不是最佳解决方案。我搜索了“previous”函数,发现 break;switch 的一个 case 中丢失了。

关于c++ - QT排序模型并在表格 View 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com