我是Qt的新手,所以请耐心等待.
我已成功设法从StringList和Object的QList填充ListView*
我现在正在努力的是使用在C++中定义的派生QAbstractListModel的类在QML中填充ListView.
这是我的CPP类的原型:
class MessageListEntryModel : public QAbstractListModel
{
Q_OBJECT
public:
enum eMLERoleTypes
{
MLERT_MSG = Qt::UserRole+1,
MLERT_COLOR
};
MessageListEntryModel(QObject* parent=0);
virtual ~MessageListEntryModel();
void AddEntry(QString aMessage, QColor aColor);
// pure virtuals implementations
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const ;
int columnCount(const QModelIndex &parent = QModelIndex()) const ;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &child) const ;
QHash<int,QByteArray> roleNames();
private:
QList<MessageEntry*> m_vpMessages; …Run Code Online (Sandbox Code Playgroud) 据我所知,在类中创建常量函数对于读/写编译器优化很有用.
类中的常量函数意味着类成员在执行函数期间将保持不变.但是,你可以通过const转换隐式参数来绕过这个(ofc这是一个非常糟糕的做法).
我的问题如下:
以下代码可能导致哪些陷阱(特别是在与线程同步无关的性能方面)?
int myClass::getSomething() const
{
myClass* writableThis = const_cast<myClass*>(this);
writableThis->m_nMemberInt++;
...
return m_nSomeOtherUnchangedMember;
}
Run Code Online (Sandbox Code Playgroud)
另一个相关问题:
行为编译器/ platform/os是否具体?
我还非常感谢有人能够在编译/执行这样的代码时解释引擎盖下的魔法(我推测CPU正在基于函数是const的事实进行无序优化,并且在实际执行期间不尊重这一点应该有一些副作用).
编辑:
感谢您为我澄清这一点.经过进一步的研究,所有收到的答案都是正确的,但我只接受一个:).
关于仅用于语法核心的const限定符,我相信这个答案是正确和错误的,说明这个(imho)的正确方法是它主要用于语法核心(在非常有限的场景中它可以产生不同/更好的代码).参考文献:SO相关问题,相关文章
使用QT Creator我有一个项目(让我们称之为Proj A),它依赖于静态链接项目(让我们称之为Proj B).
Proj A包含Proj B所需的一些头文件.
在Proj BI中,删除了一个名为"SomeHeader.h"的头文件,该文件由Proj A中的"MyClass.cpp"使用,并将描述等移到另一个头中.
当然,在Proj AI的"MyClass.h"中删除了旧的include并将其替换为新的.
编译时我得到以下错误(这真让我感到困惑):
make:***没有规则来制作'MyClass.o'所需的目标'SomeHeader.h'.
我搜索了编译输出,.h,.cpp文件,.pro文件和'SomeHeader'在任何地方都找不到.
我已经清理了项目并重建了,但仍然没有.
我猜QT Creator正在制作一些在某种程度上变成永久性的临时makefile.
那我接下来该尝试什么呢?
qt ×2
c++ ×1
compilation ×1
const-cast ×1
listview ×1
qmake ×1
qt-creator ×1
qt5 ×1
qtquick2 ×1
this ×1