常数类成员、赋值运算符和QList
如果我是正确的话,请说服我是否有更好的解决方案: 我知道,具有int const width;等常数成员的对象无法由编译器隐含创建的合成分配运算符处理.但是Qlist(我想也想STD :: list)需要一个工作的分配操作员.因此,当我想使用具有常数成员和Qlist的对象时,我有三种可能性: 不要使用恒定成员. (不是解决方案) 实施我自己的任务运营商. 使用其他不需要分配的容器 操作员 是正确的吗?还有其他优雅的解决方案吗? 我也想知道我是否可以: (4)迫使编译器创建与常数成员打交道的分配运算符! (我不明白为什么这是一个大问题.为什么操作员不够聪明,无法在内部使用初始化列表?或者我缺少某些内容?) (5)告诉Qlist我永远不会在列表中使用分配操作. 编辑:我从来没有自己分配此课程的对象.它们仅由复制构造函数或超载构造函数创建.因此,分配运算符仅由容器我自己要求. edit2:这是我创建的分配运算符.我不确定它是否正确.单元具有两个参
14 2024-03-17
编程技术问答社区
在C++/QT中制作一个抽象类对象的QList?
尽管这里的其他问题/答案有无数的时间,但这是我的第一个问题,所以不要对我太苛刻! :) 我一直在学习qt/c ++,假设我有这样的东西: class AbstractMasterClass{ public: virtual void foo(void) = 0; //Pure virtual method } 此类将有足够的子类,每个类都实现自己的foo()方法. 问题是:如何创建一个我将使用AbstractMasterClass的子类填充的QLIST? 目的是能够通过列表迭代每个元素调用foo()方法,即以与Java接口相同的方式使用Master类. 我最终遇到了几个编译时间错误的尝试,说我们不能在创建Qlist时分配抽象类的对象(显然). 那么我该怎么做,或者有更好的方法来制作C ++/QT中的Java界面? 预先感谢大家回答或指向我正确的方向! 解决方案 这是一个通用的C ++问题,而不是QT问题.在这种情况下,您需要使用多态性
22 2024-01-09
编程技术问答社区
带有模板的QList通用join()函数
我正在尝试为qlist制作一个通用join()Qlist(例如join(for QStringList)),以便为任何类型的QLIST制作toString()函数. 此功能需要一个QLIST,一个分离器和一个功能来驱动如何打印项目. 考虑此代码: #include #include template static QString join(const QList &list, const QString &separator, const std::function toStringFunction) { QString out; for(int i = 0; i
22 2023-10-16
编程技术问答社区
为什么QList::at()不检查索引是否存在,而且还返回一个只读的值?
这个问题更像是一个询问,然后实际寻求解决问题的解决方案. QList::at()不仅不检查索引是否超出界限,而且还返回a const,因此仅在read-only方案中使用: const t&qlist :: at(int i)const 在列表中的索引位置i返回项目. 我必须是一个有效的 列表中的索引位置(即0 此功能非常快(恒定时间). 我刚刚发现了QList的这些特殊的实现详细信息,同时试图将新值分配给列表中的元素,我想知道是否有这样做的理由. 否检查索引有效性 in C++ STL如果我们服用std::array或std::vector(我不服用std::list,因为它根本没有std::list::at()),我们有以下内容: std :: vector :: at 该函数会自动检查n是否在向量中有效元素的范围内,如果不是 ,则抛出out_of_range异常 首先,我认为不包括检查,以确保"此功能非常快(恒定时间)".但是,
38 2023-09-29
编程技术问答社区
序列化一个以自定义类的Qlist为成员的类(使用QDataStream)。
我正在尝试序列化课程(我的自定义课[我删除了一些设置器]),其中包括QLIST(问题也是我的自定义类).在测试序列化期间,当Qlist在课堂课内的任何对象时,我会得到一个sigsegv(分段故障). upd1:我序列化qlist*,现在我将其更改为Qlist,但Sigsegv仍然出现. class Lesson { public: Lesson(); Lesson(QString, QString, QList); QString getName() const; QString getText() const; QList* getTest() const; friend QDataStream &operator
42 2023-08-29
编程技术问答社区
为什么 QList 没有 resize() 方法?
我只是注意到QList没有resize方法,而QVector有一个.为什么是这样?并且是否有等效函数? 解决方案 我认为原因是因为QList不需要元素类型具有默认构造函数. 因此,没有操作QList曾经创建一个对象只会复制它们. 但是,如果您确实需要调整QList的大小(无论出于何种原因),则可以做到这一点.请注意,这只是一个便利函数,并且没有记住性能. template void resizeList(QList & list, int newSize) { int diff = newSize - list.size(); T t; if (diff > 0) { list.reserve(newSize); while (diff--) list.append(t); } else if (diff
114 2023-07-25
编程技术问答社区
从QML访问C++ QLists
如果我有C ++中的内容列表,我如何将其暴露于QML(QT5/QTQUICK 2中)? QML似乎只能理解QObject衍生的类,这是一个问题,因为QObject s不能放入QList或复制中.我该怎么做: struct Thing { int size; QString name; }; class ThingManager : public QObject { Q_OBJECT // These macros support QtQuick, in case we one day want to use it to make a slick // interface (when QML desktop components are released). Q_PROPERTY(QList things READ things NOTIFY thingssChanged) public: // ...
30 2023-07-17
编程技术问答社区
两个线程可以同时从同一个QList中读取吗?
穿线的新手很新,我有一个Qlist,线程之间共享它们之间的线程.他们都有自己的空间可以工作的空间,而GUI(模型/视图)不断访问此列表.然后,我得到了指向qdatalist.size()的崩溃.调试并不能真正帮助我,因为如果我介入代码,以及当我尝试崩溃的Qlist时,我永远不会遇到这个问题,没有可用的信息. 那么,我的问题是:是否可以同时获得Qlists大小并读取对象?列表中的对象是线程安全的,不能同时通过不同的线程读/写入/写入. 获取" 0xc0000005:访问违规读取地点0xfeeefefa".我指出我: qlist.h 中的内联int size const()const 我穿过通话堆栈并找到了以下操作: QtCored4.dll!QListData::size() Line 98 + 0x11 bytes C++ QtNetworkd4.dll!QList
98 2023-07-17
编程技术问答社区
用于显示大量数据行的Qt小部件
我试图使用QT(5.1). 说,我希望浏览的行数量可以从1亿到10亿. 带有自定义型号的QTableWidget可以运行几百万行,但是QTableWidget为每行分配数据,因为您可以重新大小尺寸的行高度,因此它必须为此存储数据,该数据可以使用Megabytes,甚至可以使用Megabytes,甚至可以使用Gigabytes带有100m行的内存. i不需要重新算置的行功能仅仅是多列列表是理想的选择,但是qtreectrl似乎并不适用于许多行,而Qlist似乎只支持单列. . 我应该为此目的从qabstractitemview实现自定义小部件吗? 对于那些熟悉wxwidgets/wepython的人,可以这样做,并且与数十亿行: import wx class VirtualList(wx.ListCtrl): def __init__(self, parent, id, pos, size, flags): wx.ListCt
26 2023-07-17
编程技术问答社区
使用QQmlListProperty在Qml中显示和修改QList
再次,我有一个问题(也许是一个问题),我使用qt5和qml的qt和qml进行了一个程序,并使用qtquick 2.0进行QML,并且我有一个C ++模型Qlist,我需要在运行时,运行时修改列表,我使用Q qqmllistProperty并在QML中显示这些项目,但是在我添加或删除代码的那一刻,它们并不是隐藏和显示: class ConceptsList: public QObject{ Q_OBJECT Q_PROPERTY(QQmlListProperty concepts READ concepts NOTIFY conceptsChanged) Q_CLASSINFO("DefaultProperty", "concepts") public: ConceptsList(QObject *parent=0); QQmlListProperty concepts(); Q_INVOKABLE static vo
142 2023-07-17
编程技术问答社区
重新审视QList与QVector
我的问题基本上是何时选择QVector以及何时选择QList作为QT容器.我已经知道的: qt docs: qlist类 出于大多数目的,Qlist是正确使用的类.其基于索引的API比Qlinkedlist基于迭代器的API更方便,并且由于其将其存储在内存中的方式,通常比QVector更快.它还扩展到可执行文件中的较少代码. 也是如此流行的Q&A: qvector vs qlist .它也有利于Qlist. 但是:在2015年QT世界峰会上,KDAB介绍了"为什么Qlist有害",这基本上是在这里: 不要使用Qlist,请使用q_declare_typeinfo 据我了解, QList在分配新元素时,几乎所有类型的QList都是效率降低的.每次添加新元素时,都会调用new(每元素一次),与QVector相比,这效率低下. 这就是为什么我现在要理解的原因:是QVector我们应该选择默认容器吗? 解决方案 QT将QList宣传为"所有交易的杰
56 2023-07-17
编程技术问答社区
保存和加载QList<Class*>至文件
我有一个类ContactData和一个class friendlist持有Qlist,我超载了>运营商. contactdata.h class ContactData { //all public for testing public: ContactData(); QString m_name; QString m_description; bool m_online; }; QDataStream &operator>(QDataStream& in, ContactData* contactData); contactdata.cpp QDataStream &operator
64 2023-07-17
编程技术问答社区
从QList中填充QVector
我有一个QLIST和QVECTOR.我填充Qlist,然后尝试复制到QVector. Ovector具有 fromlist()方法.但这不起作用. 我的代码: QList listA; QVector vectorA; //I also tried QVectorvectorA(100); for(int i=0; i
66 2023-07-17
编程技术问答社区
Qt-QList常态正确性
a QList无法轻易进行const纠正.考虑功能 void f(QList list) { list[0]->constFunction(); } 我可以将F更改为 void f(QList list) ,但是我不能做 f(QList()); //Compile error 不再,因为编译器无法隐含地施放QList到QList.但是,我可以明确重新解释Qlist,如下所示: template inline QList &constList(const QList &list) { return (QList &)list; } 这使我能够使用constList模板函数将任何QList施放到QList中,如 中 f(constLi
26 2023-07-16
编程技术问答社区
QList和删除
i有一个QList,上面有指向具有类型Model的对象的指针.我想在使用后适当地删除此QList.我知道QT理念是避免C风格的内存管理.我如何delete这个QList? 解决方案 您可以使用 qdeleteall : qDeleteAll(lstMdls); lstMdls.clear(); 其他解决方案 从较早的修订版中,这是OP的方法: QListlstMdls; get Data(lstMdls); /* * Do other things */ for(int i=0;i
46 2023-07-16
编程技术问答社区
error: type/value mismatch at argument 1 in template parameter list for ' template<class T> class QList'
我试图有一个QLIST并在编译时获得错误! 这是我的代码: class Right { public: Right(); Right(const Right& other); Right(RightName name, QDate validity_date); bool isValid() const; bool operator==(const Right& other)const; Right &operator=(const Right &other); QString name; QDate expiryDate; }; ,然后在qlist中使用此权利 class FileRightsRepo { public: FileRightsRepo(QString rightsPath); ~FileRightsRepo() { } // IRightsRepo interfac
72 2023-07-16
编程技术问答社区
深度复制何时发生在QList上?
在我正在努力的课程中,我正在兼顾几个QList.我听说QT试图在可能的情况下不要进行清单的深刻副本.据我了解,这意味着当您这样做时不会发生深层复制: QList myList; myList otherList = myList; // No deep copy 在某些情况下,我需要确保对QList的深层副本永远不会发生.为了确保与我合作的QList,我需要确保避免使用什么样的操作或操作? 解决方案 使用 对象分配(带有operator =())隐式共享对象是 使用浅副本实施. 这意味着单独分配永远不会导致复制包含的数据.但是,写入共享实例将导致复制源对象.这种模式通常被称为抄写. 因此,要回答您的问题,如果您从未写信给共享实例,那么它们将永远不会被复制.如果您想完全防止副本制作,请源自Qlist和覆盖并隐藏复制构造函数和分配操作员. 其他解决方案 当您将QLIST作为函数
60 2023-07-16
编程技术问答社区
Qt: 在使用foreach宏进行迭代时,是否可以删除QList元素?
我是QT的新手,试图学习成语. QT进入foreach循环时,会自动获取容器的副本.如果您在迭代时修改容器,则不会影响循环. ,但它没有说 在使用foreach迭代时删除元素.我最好的猜测是: int idx = 0; foreach (const Foo &foo, fooList) { if (bad(foo)) { fooList.removeAt(idx); } ++idx; } 似乎不得不在循环外面范围idx(完全必须保持单独的环计数器). 另外,我知道foreach QList的副本,这很便宜,但是一旦我删除元素,就会发生什么 - 还是很便宜或有昂贵的复制品修改吗?/a>. 编辑:这似乎也不是惯用QT. for (int idx = 0; idx
72 2023-07-16
编程技术问答社区
将QList<int>保存为QSettings
我想在不循环的情况下将QList保存到我的QSETTING中. 我知道我可以使用WriteArray()和循环保存所有项目或将Qlist写入QByTearray并保存此项目并保存此项目,但后来在我的INI文件中不可读取. 目前,我正在使用以下内容将我的QList转换为QList: QList variantList; //Temp is the QList for (int i = 0; i 保存到我的设置中,我使用以下代码: QVariant list; list.setValue(variantList); //saveSession is my QSettings object saveSession.setValue("MyList", list)
54 2023-07-16
编程技术问答社区