【问题标题】:Connecting QML and Qt连接 QML 和 Qt
【发布时间】:2012-02-13 14:27:11
【问题描述】:

所以这是我的复杂问题,我希望你知道答案:)

我正在使用 Qt Necessitas 为 android 开发应用程序。 我为 GUI 制作了 .ui 文件,但我没有找到我真正想要的,所以很多人建议使用 QML,因为它非常动态并且有很多可用选项。

但对我来说,问题是我以前从未使用过 QML。

我需要一些帮助,只需要几个功能,以便我知道以后该怎么做。

例如。这是我的函数,我称之为使用 post 方法从数据库中读取数据并调用 php 脚本。

void MainWindow::Citanje_korisnika()  //read users
{
    init();
    QUrl params;
    params.addQueryItem("action","Citanje_korisnika");
    QByteArray data;
    data.append(params.toString());
    data.remove(0,1);
    QNetworkRequest request;
    request.setUrl(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader,
    QVariant("application/x-www-form-urlencoded"));
    reply = manager->post(request, data);
    connect(reply, SIGNAL(downloadProgress(qint64, qint64)),this, SLOT(updateDataTransferProgress(qint64,qint64)));
}
  1. 所以我的问题是如何从 qml 代码中调用这个函数?例如当用户按下按钮时?

  2. 之后,我有了这个功能,可以将所有内容都放入我的表单中。

    void MainWindow::Pokazi(QList< QMap<QString,QString> >& osobe)  //show
    {
        i_max=osobe.count();
        osobe_next=osobe;
        osoba = osobe.at(0);
        //trenutni_id=osoba["id"];
        ui->label_ID->setText(osoba["id"]);
        ui->line_ime->insert(osoba["ime"]);
        ui->line_prezime->insert(osoba["prezime"]);
        ui->line_telefon->insert(osoba["broj"]);
        ui->line_adresa->insert(osoba["adresa"]);
    }
    

所以这就是我想在我的列表中显示所有人员的地方。

  1. 是否可以将上面的 QList 加载到看起来像这样的 QML ListView 中? 我可以动态填充吗?

    ListModel {
        ListElement {
            name: "Bill Smith"
            number: "555 3264"
        }
        ListElement {
            name: "John Brown"
            number: "555 8426"
        }
    }
    

这只是已插入值的示例。我的问题是如何让它从 qml 代码动态填充?

我想让我的列表看起来像此链接中的第二张图片:http://doc.qt.nokia.com/4.7-snapshot/qml-listview.html

我设法让它看起来像这样,但问题是我想在里面动态加载我的数据,我不希望它预定义。

如果您需要更多代码,请告诉我。

【问题讨论】:

    标签: android c++ qt qml


    【解决方案1】:

    1) 从 QML 调用 c++ 函数很容易。 您需要通过 setContextProperty 公开您的对象 QDeclarativeContext *ctxt = view.rootContext(); ctxt->setContextProperty("timer", &timerObj);

    然后你可以调用任何被声明为 Q_INVOKABLE 的暴露对象或函数的槽。

    This link 可能会为您提供更多帮助。

    2)您需要创建模型,可以使用QStringListModel,也可以创建从QAbstractListModel派生的自定义模型。

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多