如何发送QList反对另一个类?

发布于 2024-09-08 20:44:14 字数 643 浏览 5 评论 0原文

我正在尝试将 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);
}

i'm trying to send a QList as a parameter to another class but for some reason i lose all it's content ...
(when i open the object with the debuger i see for objects...)

trying to send QList books to class 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 *> *);
};

i'm sending books like this:

void Analyze::generate_report()
{
.
.
.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何处潇湘 2024-09-15 20:44:14

小例子

#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);细绳

Small example

#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();
}

so just use * in function when calling elements of your QList, like in
qDebug() << *k->at(i); string

穿越时光隧道 2024-09-15 20:44:14

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

You should pass the QList by value. The reason, while this may seem silly on the surface, is that QList is implicitly shared. Please read http://doc.trolltech.com/latest/implicit-sharing.html to see more on that topic.

べ繥欢鉨o。 2024-09-15 20:44:14
#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 上使用指针。因为它们是自动隐式共享的。所以在这两个上使用指针是糟糕的设计。

#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();
}

There is already a class called QStringList to use. Also, you would want to pass it by reference. Also, you do not want to use pointers on containers or QString. As they are automatically implicitly shared. So it's bad design to use pointers on those two.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文