【问题标题】:QSortFilterProxyModel QTableView 5.3 not sorting/updating?QSortFilterProxyModel QTableView 5.3 不排序/更新?
【发布时间】:2014-09-19 22:58:29
【问题描述】:

Qt 5.3.0 & 5.3.1 Linux

我继承了 QSortFilterProxyModel 并实现了 lessThan()。 当有人单击 tableview 标题时(我已“连接”到) 我打电话给invalidate(),我看到它叫'lessThan',但表格视图从来没有 更新。有人能告诉我我错过了什么吗? lessThan() 绝对是 当我放置一些打印语句以查看内容时正确排序 当它被调用时发生在里面。我也试过添加 table->repaint() 什么都不做。

这是我的代码:

QTableView *table = m_ui->tableView;
table->resize(930, 200);
table->setAlternatingRowColors(true);
table->setSelectionMode(QAbstractItemView::SingleSelection);
table->setSelectionBehavior(QAbstractItemView::SelectRows);
table->verticalHeader()->hide();

QStringList header;
header << "ID";
header << "Prefix";
header << "First";
header << "M";
header << "Last";
int cols = header.size();

BookcaseModel *bookcaseModel = new BookcaseModel(this, cols, header);
m_proxy_bookcase = new SortFilterProxyModelBookcase(this);
m_proxy_bookcase->setSourceModel(bookcaseModel);
m_proxy_bookcase->sort(0, Qt::AscendingOrder);
m_proxy_bookcase->setDynamicSortFilter(true);
m_proxy_bookcase->setSortRole(Qt::DisplayRole);

table->setModel(bookcaseModel);
table->setSortingEnabled(true);
table->horizontalHeader()->setSortIndicator(0, Qt::AscendingOrder);
table->horizontalHeader()->setSectionsClickable(true);

connect(table->horizontalHeader(), SIGNAL(sectionClicked(int)),
        this, SLOT(selectedColumnSlot(int)));

然后是槽:

void selectedColumnSlot(int col) 
{
    m_proxy_bookcase->sort(col, Qt::DescendingOrder);
    m_proxy_bookcase->invalidate();
}

【问题讨论】:

    标签: qt qtableview qsortfilterproxymodel


    【解决方案1】:

    考虑到这一行:

    table->setModel(bookcaseModel);
    

    您的表格似乎显示的是底层模型,而不是代理。应该是:

    table->setModel(m_proxy_bookcase);
    

    当您使用代理对模型进行排序时,它不会修改源模型;只有代理知道调用sort() 之后的元素顺序。这就是为什么您的视图必须显示代理而不是源模型的原因。

    而且(我可能错了)我认为在sort() 之后调用invalidate() 没有用。

    【讨论】:

    • 太棒了,就是这样!不敢相信我错过了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2012-02-17
    相关资源
    最近更新 更多