Qt c++返回字符串值

Qt C++ return string value

本文关键字:字符串 返回 c++ Qt      更新时间:2023-10-16

我有以下代码:

filter.h

#pragma once
#include <QObject>
#include <QSortFilterProxyModel>
class FilterModel : public QSortFilterProxyModel
{
    Q_OBJECT
public:
    explicit FilterModel(QObject *parent = 0);
    Q_INVOKABLE QString getText (QString text);
};

filter.cpp

#include "filter.h"
#include <QDebug>    
FilterModel::FilterModel(QObject *parent) : QSortFilterProxyModel(parent) {}
QString FilterModel::getText(QString text)
{
    QString qmltext = text;
    qmltext != NULL ? qDebug() << qmltext
                    : qDebug() << "TEXT = NULL";
    return qmltext;
}

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "abonentstable.h"
#include "filter.h"
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    AbonentsSqlModel *abonentsSqlModel = new AbonentsSqlModel;
    abonentsSqlModel->setQuery("SELECT * FROM abonents");
    FilterModel *filterModel = new FilterModel;
    filterModel->setSourceModel(abonentsSqlModel);
    filterModel->setFilterKeyColumn(0);
    filterModel->setFilterWildcard("9");
    QQmlContext *context = engine.rootContext();
    context->setContextProperty("abonents", filterModel);
    context->setContextProperty("filter", filterModel);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

.qml文件部分:

TextField {
    id: textField
...
    onTextChanged: {
        filter.getText(textField.text)
    }
...
}

方法getText()从QML TextField获取文本(突然!)并将其打印到调试器中,它工作得很好。但如您所见,我有用于表排序的代码。下面的问题是:现在排序掩码是"9",它工作,但我需要以某种方式从getText()返回QString qmltext,并将其放入main.cpp中的filterModel->setFilterWildcard()中,如:

QString qmlText = filterModel.getText(QString);
...
filterModel->setFilterWildcard(qmlText);

当然,这只是一个例子,它不起作用,我不知道怎么做

我不完全明白你想做什么,但我认为你需要这样的东西(如果你真的需要返回值):

QString FilterModel::getText(const QString& text)
{
setFilterWildcard(text);
return text;
}

By the way:

 qmltext != NULL

不能工作。使用:

qmltext.isEmpty() == false