在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问题.在这种情况下,您需要使用多态性
0 2023-11-19
编程技术问答社区
带有模板的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
0 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异常 首先,我认为不包括检查,以确保"此功能非常快(恒定时间)".但是,
10 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
6 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
76 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: // ...
4 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
34 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
6 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
52 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宣传为"所有交易的杰
20 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
14 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
34 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
4 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
18 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
18 2023-07-16
编程技术问答社区
深度复制何时发生在QList上?
在我正在努力的课程中,我正在兼顾几个QList.我听说QT试图在可能的情况下不要进行清单的深刻副本.据我了解,这意味着当您这样做时不会发生深层复制: QList myList; myList otherList = myList; // No deep copy 在某些情况下,我需要确保对QList的深层副本永远不会发生.为了确保与我合作的QList,我需要确保避免使用什么样的操作或操作? 解决方案 使用 对象分配(带有operator =())隐式共享对象是 使用浅副本实施. 这意味着单独分配永远不会导致复制包含的数据.但是,写入共享实例将导致复制源对象.这种模式通常被称为抄写. 因此,要回答您的问题,如果您从未写信给共享实例,那么它们将永远不会被复制.如果您想完全防止副本制作,请源自Qlist和覆盖并隐藏复制构造函数和分配操作员. 其他解决方案 当您将QLIST作为函数
24 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
28 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)
30 2023-07-16
编程技术问答社区
QList: 内存不足
我有一个用于嵌入Linux的QT中的图形应用程序.此应用程序的一部分是每250毫秒更新显示屏幕.但是,大约8-10小时后,应用程序以" QLIST:OUT NOMER NOMER"错误崩溃.我已经将功能和线(从某种意义上)隔离了线,但是由于我不使用Qlist,所以我不知道为什么会发生这种情况.此功能中唯一的主动行是在此问题的结尾. 我意识到Qlist从来没有"收缩"它用于保存项目的内存,但是我在代码中的任何地方都没有使用QLIST.我只称呼" setStyleSheet"来在UI小部件(标签,文本字段等)上设置各种字体和属性,但它都有更多的代码,但所有代码都发表了评论,因此我假设它与SetStyleSheet有关.有人知道为什么会发生这种情况吗?如果是这样,您知道解决这个问题吗?我正在使用Q.T. 4.3 btw(由于它是在我使用的嵌入式系统上专门加载的). 非常感谢您的时间. if(twc_rx){ ui->label_Rx->setStyleShee
8 2023-07-16
编程技术问答社区