连接QML和Qt

时间:2012-02-13 14:27:12

标签: android c++ qt qml

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

我正在使用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"]);
    }
    
  3. 所以这就是我要在列表中显示所有人的地方。

    1. 是否可以将上面的QList加载到QML ListView中,如下所示? 我可以动态填充吗?

      ListModel {
          ListElement {
              name: "Bill Smith"
              number: "555 3264"
          }
          ListElement {
              name: "John Brown"
              number: "555 8426"
          }
      }
      
    2. 这仅是已插入值的示例。我的问题是如何动态地从qml代码填充?

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

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

      如果您需要更多代码,请与我们联系。

1 个答案:

答案 0 :(得分:2)

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

然后你可以调用被曝光的对象或函数的任何插槽,这些插槽被解析为Q_INVOKABLE。

This link可能对您有所帮助。

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

希望这会对你有所帮助。