cuốn sách gpt4 ai đã làm

c++ - 错误:没有用于调用 QSortFilterProxyModel::setSourceModel(NavaidsModel&

In lại Tác giả: Walker 123 更新时间:2023-11-28 01:39:23 27 4
mua khóa gpt4 Nike

我在尝试设置 SourceModel 时遇到使用 QSortFilterProxyModel 的编译问题。

错误信息是:没有匹配函数调用 QSortFilterProxyModel::setSourceModel(NavaidsModel&)

候选人是:virtual void SortFilterProxyModel::setSourceModel(QAbstractItemModel*)

Đây là mã của tôi:

主要.cpp

#include "navaidsmodel.h"
#include
#include
#include

int main(int c, char **v)
{
QApplication a(c, v);

//Model
NavaidsModel model;
model.readFromCSV(QCoreApplication::applicationDirPath() + "/files/data.csv");

//Proxy
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel;
proxyModel->setSourceModel(model); //Here is the trick

//Filter
QRegExp rx("ROBU");
rx.setCaseSensitivity(Qt::CaseInsensitive);
rx.setPatternSyntax(QRegExp::Wildcard);
proxyModel->setFilterRegExp(rx);
proxyModel->setFilterKeyColumn(0);

//View
QListView view;
view.setUniformItemSizes(true);
view.setModel(proxyModel);
view.show();

return a.exec();
}

这里是 navaidsmodel 的构造函数:

class NavaidsModel : public QAbstractListModel
{
Q_ĐỐI TƯỢNG
công cộng:

NavaidsModel(QObject *parent = Q_NULLPTR):QAbstractListModel(parent){
}
enum NavaidsRoles {
PositionRole = Qt::UserRole + 1,
OACICodeRole,
CountryCodeRole
};

所以,我理解 setSourceModel 请求 QAbstractItemModel。

对我来说,NavaidsModel 继承自 QAbstractListModel,而 QAbstractListModel 继承自 QAbstractItemModel。

所以,它应该没问题,但事实并非如此。

你能解释一下问题的根本原因是什么吗?

Cảm ơn sự giúp đỡ của bạn.

câu trả lời hay nhất

setSourceModel 需要一个指向模型的指针,而不是值或引用。所以你所要做的就是改变线路

proxyModel->setSourceModel(model);

đến

proxyModel->setSourceModel(&model);

或者,您也可以使用 new 创建模型,即

NavaidsModel *model = new NavaidsModel();

biên tập:

在使用指针时,您应该始终选择智能指针或使用 Qt 父子机制自动删除模型及其 View 。你应该让你的两个模型成为 View 的 child :

int main(int c, char **v)
{
QApplication a(c, v);

// create the view first
QListView view;

//Model
NavaidsModel *model = new NavaidsModel(&view);
model->readFromCSV(QCoreApplication::applicationDirPath() + "/files/data.csv");

//Proxy
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(&view);
proxyModel->setSourceModel(model);

// ...

关于c++ - 错误:没有用于调用 QSortFilterProxyModel::setSourceModel(NavaidsModel&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47951640/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress