如何将QList <object * =“”>对象发送到另一个类?</object>

时间:2010-07-05 12:00:06

标签: qt pointers qlist

我正在尝试将QList作为参数发送到另一个类但由于某种原因我丢失了它的所有内容...... (当我用debuger打开物体时,我看到物体......)

尝试将QList书籍发送到课程Print:

class Store: public QWidget {
    Q_OBJECT
public:
    Analyze(QWidget *parent = 0);
    void generate_report();
    ~Analyze();

private:
    QList<Book *> books;

};

class Print
{
public:
    Print();
    bool generate_report_file(QList<Book *> *);
};
我正在寄这样的书:

void Analyze::generate_report()
{
.
.
.

    Print p;
    if (!p.generate_report_file(&books))
        QMessageBox::warning(this, "XML Escape","Error creating out.html", QMessageBox::Ok);
}

3 个答案:

答案 0 :(得分:2)

小例子

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QList>
#include <QString>

void print_list(QList<QString *> * k)
{
    for (int i=0; i<k->size(); i++)
    {
        qDebug() << *k->at(i);
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QList<QString *> books;
    books.append(new QString("asd"));
    books.append(new QString("asdfgh"));
    books.append(new QString("asdjhhhhhhtyut"));
    print_list (&books);

    return a.exec();
}

所以在调用QList的元素时,只需在函数中使用*,就像在 qDebug()&lt;&lt; * K-&GT;在(ⅰ);串

答案 1 :(得分:0)

#include <QtCore/QtCore>

void
printList(const QStringList& list)
{
    foreach (const QString& str, list) {
        qDebug() << str;
    }
}

int main(int argc, char** argv) {
    QCoreApplication app(argc, argv);

    QStringList list;
    list << "A" << "B" << "C";

    printList(list);

    return QCoreApplication::exec();
}

已经有一个名为QStringList的类可供使用。此外,您还希望通过引用传递它。此外,您不希望在容器或QString上使用指针。因为它们是自动隐式共享的。所以在这两个上使用指针是不好的设计。

答案 2 :(得分:0)

您应该按值传递QList。原因虽然表面看起来似乎很愚蠢,但是QList是隐式共享的。请阅读http://doc.trolltech.com/latest/implicit-sharing.html以了解有关该主题的更多信息。