как отправить QListобъекты в другой класс? - PullRequest
1 голос
/ 05 июля 2010

Я пытаюсь отправить QList в качестве параметра другому классу, но по какой-то причине я теряю все его содержимое ... (когда я открываю объект с помощью отладчика, я вижу объекты ...)

пытается отправить книги 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 ]

2 голосов
/ 05 июля 2010

Маленький пример

#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 () << * k-> at (i); строка

0 голосов
/ 05 июля 2010

Вы должны передать QList по значению. Причина, хотя на первый взгляд это может показаться глупым, заключается в том, что QList неявно используется совместно. Пожалуйста, прочитайте http://doc.trolltech.com/latest/implicit-sharing.html, чтобы узнать больше по этой теме.

0 голосов
/ 05 июля 2010
#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. Поскольку они автоматически неявно делятся. Поэтому неправильно использовать указатели на эти два элемента.

...