标签: qlist

将 QList<QString>* 传递给来自 QThread 的信号

在我的 qt 应用程序中,我有一个类(worker),它是从在线程中运行的对象调用的。在我的工人阶级中,我创建了 QList,如下所示

QList <QString> albums;

while (i.hasNext())
{
  QRegularExpressionMatch album = i.next();
  albums.append(album.captured("album"));
}
emit SignalGotAlbums(albums);
Run Code Online (Sandbox Code Playgroud)

我在另一个包装我的工作线程的类中收到这个信号,以供线程使用。我们将此类命名为 GetAlbumsThread。在那里我成功地在插槽中接收到 SignalGotAlbums

void GetAlbumsThread::Reply(QList <QString> &list)
{

 emit gotAlbums(list);
 emit finished();
}
Run Code Online (Sandbox Code Playgroud)

在这个插槽中,我正在触发另一个信号gotAlbums,该信号应该与我的gui线程中的插槽连接,并将我的QList传递到那里。我的问题是,当我尝试将 QList 从线程传递到 gui 时,它不起作用!插槽未收到 gotAlbums 信号;

信号声明如下:

void gotAlbums(QList<QString> &);
Run Code Online (Sandbox Code Playgroud)

并连接到我的 gui 插槽(当然在我的 gui 线程中),如下所示:

private slots:
    void AlbumsReceived(QList<QString> &list)
    ...

    QThread* albumsThread = new QThread();

    GetAlbumsThread *albumsObject = new GetAlbumsThread();

    albumsObject->moveToThread(albumsThread);

    connect(albumsThread, SIGNAL(started()), albumsObject, SLOT(process()));

    connect(albumsObject, SIGNAL(gotAlbums(QList<QString> &)), this, SLOT(AlbumsReceived(QList<QString> &));

     albumsThread->start();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,AlbumsReceived 从未被调用。连接返回真。有人可以帮我弄这个吗。我认为问题在于线程之间传递 QList。

qt multithreading signals qlist slot

4
推荐指数
2
解决办法
7994
查看次数

Qt:如何处理源自 Qt 类内部的崩溃?

我正在做一些关于在基于 Qt 的应用程序中处理错误的研究,在阅读了一些关于 Qt 使用断言而不是异常抛出的文章后,我想到了以下问题:

Qt 类的某些方法会在其中发生错误时使应用程序立即崩溃。例如,如果我使用 Qt 容器(例如 QList)并调用大于容器大小的成员,则软件会立即关闭:

QList<int> myList;
int itemp = myList.at(1);

//Crash!
Run Code Online (Sandbox Code Playgroud)

现在我不希望在我的应用程序中发生这种情况:如果发生这样的事件,我想处理该事件(即使只是在错误日志中记录某些内容并稍后关闭应用程序)。但是,如果 Qt 在我进行任何错误检查之前使软件崩溃,我该怎么做?并且将代码放在 try-catch 中是行不通的,因为 Qt 在发生这种情况时不会抛出任何内容(至少在未启用异常时不会抛出,这是我假装使用的)。有没有办法解决这个问题?

c++ debugging qt qlist qtcore

4
推荐指数
1
解决办法
1893
查看次数

如何从std :: vector创建QList

QList::fromStdList允许您创建QListstd::list.但如何建立QListstd::vector

当然,除了手动循环:

QList<T> myList;
myList.reserve(vector.size());
for(size_t i = 0, l = vector.size(); i < l; ++i)
    myList << vector[i];
Run Code Online (Sandbox Code Playgroud)

c++ arrays containers stdvector qlist

4
推荐指数
1
解决办法
3702
查看次数

使用"<<"将值输入到自定义类中

我是C++的新手,我正在试图弄清楚如何执行以下操作:

我有一个包含QList的类.我正在尝试填充QList,如下所示.我想知道如何实现这一目标?这是在NumberList构造函数中完成的吗?我通常会使用一个获取对象列表的方法来填充myList,并提取它们以填充QList,但这对我下面的示例不起作用.

NumberList myList;
myList << 1 << 2 << 3;
Run Code Online (Sandbox Code Playgroud)

c++ qt qlist

3
推荐指数
1
解决办法
221
查看次数

为什么QList不是从QObject派生的?

我想创建一个QObservableCollection包装器QList(使用内部QList实现和转发所有调用,同时为更改集合的函数发出某种CollectionsChanged信号),但我看到它QList不继承QObject.

我相信你需要继承QObject以发出Qt信号.所以我需要继承QObject我的QObeservableCollection.

但是QListQVector其他Qt系列并没有继承QObject,所以我想他们必须是某种下行或问题来制作一个集合.

我看到QSignalSpy继承自两者 QObject,QList<QList<QVariant>>所以也许他们只是没有看到继承QObject的理由?

c++ collections qt qobject qlist

3
推荐指数
1
解决办法
1062
查看次数

Qt list.clear()会破坏对象吗?

假设我有以下列表:

QList<Type*> list;
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
Run Code Online (Sandbox Code Playgroud)

如果我想清空列表,我可以打电话 list.clear()

它会自动删除每个指针,还是必须执行以下操作以防止内存泄漏:

foreach (Type* t, list) delete t;
list.clear();
Run Code Online (Sandbox Code Playgroud)

c++ qt qlist qtcore

3
推荐指数
1
解决办法
5939
查看次数

如何在QList中使用qSort和自定义类型?

我在排序QList包含以下内容的实例时遇到问题struct:

class modelHeuristic
{

    typedef struct {

         QString c;
         QString t;
         double value;
     }Saving;

public:

QList<Saving> list_saving;

#include "klarkeright.h"

klarkeRight::klarkeRight()
{


}
void klarkeRight::Algoritmo_Asimetrico(modelHeuristic *model)
{

    qSort(model->list_saving.begin(), model->list_saving.end());

}
Run Code Online (Sandbox Code Playgroud)

错误:二进制表达式的无效操作数('const modelHeuristic :: Saving'和'const modelHeuristic :: Saving')return(t1 <t2);

c++ sorting qt qlist qtcore

3
推荐指数
1
解决办法
7313
查看次数

将 QList&lt;QObject *&gt; 层次结构公开给 QML

我目前的情况是,我有一个 QList,其中 MyClass 还包括一个列表 QList。

为了显示这个列表层次结构,我想在 ListView 中提供一个 Repeater。

我用 QStringList 尝试过,它工作正常(请参阅下面未注释的行)。当我尝试使用 QList 执行此操作时,我无法访问 MySubClass 的名称属性。相反,显示 MyClass 的名称属性。

错误的输出:

Object 1
Object 1
Object 1
Object 2
Run Code Online (Sandbox Code Playgroud)

正确的输出应该是:

Object 1
SubObject 1
SubObject 2
Object 2
Run Code Online (Sandbox Code Playgroud)

编辑:2014 年 12 月 8 日 我发现,为什么子列表不起作用。我只需替换子 ListView 的委托中的一行(名称 -> modelData.name)。

这是我的代码:

主程序

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QList>
#include <QDebug>

#include "myclass.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    /* create simple stringlist */
    QStringList dataList;
    dataList << "Data …
Run Code Online (Sandbox Code Playgroud)

c++ qobject qlist qml

3
推荐指数
1
解决办法
3666
查看次数

如何在C++ 98中按特定字段在QList中查找对象?

我有这个简单的类:

class SomeClass
{
   QString key;
   QString someData;
   int otherField;
   public:
      QString getKey() { return key };
};
Run Code Online (Sandbox Code Playgroud)

我有这个清单:

QList<SomeClass*> myList;
Run Code Online (Sandbox Code Playgroud)

我想检查 myList 是否包含 key = "mykey1" 的对象;

for(int i = 0; i < myList.size(); i++)
{
  if(myList.at(i)->getKey() == "mykey1") 
  { 
      //do something with object, that has index = i
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何标准函数可以循环并返回此对象或索引或指针?,所以我不需要使用循环

c++ qt find qt-creator qlist

3
推荐指数
2
解决办法
1万
查看次数

如何从QStringList中删除空字符串和空字符串?

我有一个QStringList,我需要清理一些无意义的元素:空字符串和空字符串.

我找不到QStringList快捷功能.
清除空/空字符串的最简单方法是什么?

c++ qstring qt qlist

3
推荐指数
2
解决办法
2152
查看次数