c++ - 继承 QListWidgetItem

标签 c++ qt

我有一个 QDialog,我用它从 SQL 表中显示的项目列表中进行选择。选择项目后,我需要返回表并读取所选项目的所有数据。我想将 SQL ID 添加到 WidgetItem。

我创建了一个继承自 QListWidgetItem 的类。我想要做的就是添加一个整数 ID。我收到各种与元对象相关的编译错误。

这是标题:

#ifndef MYLISTWIDGETITEM_H
#define MYLISTWIDGETITEM_H

#include <QListWidget>
#include <QListWidgetItem>

class MyListWidgetItem : public QListWidgetItem
{
  Q_OBJECT
public:
  explicit MyListWidgetItem(QListWidget *parent = 0);
  explicit MyListWidgetItem(QString content, QListWidget *parent = 0);
  ~MyListWidgetItem();

  int getSqlTblEntryKey() const;
  void setSqlTblEntryKey(int);

private:
  int sqlTblEntryKey;

};

#endif // MYLISTWIDGETITEM_H

这就是来源"

#include "mylistwidgetitem.h"

MyListWidgetItem::MyListWidgetItem(QListWidget *parent) :
  QListWidgetItem(parent)
{
}

MyListWidgetItem::MyListWidgetItem(QString content, QListWidget *parent) :
  QListWidgetItem(content, parent)
{
}

MyListWidgetItem::~MyListWidgetItem()
{

}

int MyListWidgetItem::getSqlTblEntryKey() const
{
  return sqlTblEntryKey;
}

void MyListWidgetItem::setSqlTblEntryKey(int value)
{
  sqlTblEntryKey = value;
}

我遇到了这些错误:

10:43:35: Running steps for project LEAPv1.7.1...

10:43:35: Configuration unchanged, skipping qmake step.

10:43:35: Starting: "C:\Qt\Qt5.3.1\Tools\QtCreator\bin\jom.exe"

C:\Qt\Qt5.3.1\Tools\QtCreator\bin\jom.exe -f Makefile.Debug cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\LEAPV1.7.1.pdb -DUNICODE -DWIN32 -DQT_YES_DEBUG_OUTPUT -DQT_MULTIMEDIAWIDGETS_LIB -DQT_OPENGL_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_SERIALPORT_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"....\SFML-2.1\include" -I"....\Progra~2\Carmenta\Carmen~1\include" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtMultimediaWidgets" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtOpenGL" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtMultimedia" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtWidgets" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtSerialPort" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtSql" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtNetwork" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtGui" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtCore" -I"debug" -I"." -I"." -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\GLENNP~1\AppData\Local\Temp\mylistwidgetitem.obj.1304.109.jom

mylistwidgetitem.cpp

C:\Qt\Qt5.3.1\5.3\msvc2010_opengl\bin\moc.exe -DUNICODE -DWIN32 -DQT_YES_DEBUG_OUTPUT -DQT_MULTIMEDIAWIDGETS_LIB -DQT_OPENGL_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_SERIALPORT_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1600 -D_WIN32 -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/mkspecs/win32-msvc2010 -IC:/Qt-Projects/LEAP/LEAPv1.7.1 -IC:/SFML-2.1/include -IC:/Progra~2/Carmenta/Carmen~1/include -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtMultimediaWidgets -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtOpenGL -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtMultimedia -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtWidgets -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtSerialPort -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtSql -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtNetwork -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtGui -IC:/Qt/Qt5.3.1/5.3/msvc2010_opengl/include/QtCore -I. ....\Qt-Projects\LEAP\LEAPv1.7.1\mylistwidgetitem.h -o debug\moc_mylistwidgetitem.cpp cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\LEAPV1.7.1.pdb -DUNICODE -DWIN32 -DQT_YES_DEBUG_OUTPUT -DQT_MULTIMEDIAWIDGETS_LIB -DQT_OPENGL_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_SERIALPORT_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"....\SFML-2.1\include" -I"....\Progra~2\Carmenta\Carmen~1\include" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtMultimediaWidgets" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtOpenGL" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtMultimedia" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtWidgets" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtSerialPort" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtSql" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtNetwork" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtGui" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtCore" -I"debug" -I"." -I"." -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\GLENNP~1\AppData\Local\Temp\addressdialog.obj.1304.125.jom

addressdialog.cpp

cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\LEAPV1.7.1.pdb -DUNICODE -DWIN32 -DQT_YES_DEBUG_OUTPUT -DQT_MULTIMEDIAWIDGETS_LIB -DQT_OPENGL_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_SERIALPORT_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"....\SFML-2.1\include" -I"....\Progra~2\Carmenta\Carmen~1\include" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtMultimediaWidgets" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtOpenGL" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtMultimedia" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtWidgets" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtSerialPort" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtSql" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtNetwork" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtGui" -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\include\QtCore" -I"debug" -I"." -I"." -I"....\Qt\Qt5.3.1\5.3\msvc2010_opengl\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\GLENNP~1\AppData\Local\Temp\moc_mylistwidgetitem.obj.1304.390.jom

moc_mylistwidgetitem.cpp

debug\moc_mylistwidgetitem.cpp(63) : error C2039: 'staticMetaObject' : is not a member of 'QListWidgetItem'

    c:\qt\qt5.3.1\5.3\msvc2010_opengl\include\qtwidgets\qlistwidget.h(61)

: see declaration of 'QListWidgetItem' jom: C:\Qt-Testing\LEAPv1.7.1\Makefile.Debug [debug\moc_mylistwidgetitem.obj] Error 2

debug\moc_mylistwidgetitem.cpp(70) : error C2227: left of '->metaObject' must point to class/struct/union/generic type

debug\moc_mylistwidgetitem.cpp(70) : error C2227: left of '->dynamicMetaObject' must point to class/struct/union/generic type

debug\moc_mylistwidgetitem.cpp(78) : error C2039: 'qt_metacast' : is not a member of 'QListWidgetItem'

    c:\qt\qt5.3.1\5.3\msvc2010_opengl\include\qtwidgets\qlistwidget.h(61)

: see declaration of 'QListWidgetItem' debug\moc_mylistwidgetitem.cpp(83) : error C2039: 'qt_metacall' : is not a member of 'QListWidgetItem'

    c:\qt\qt5.3.1\5.3\msvc2010_opengl\include\qtwidgets\qlistwidget.h(61)

: see declaration of 'QListWidgetItem' jom: C:\Qt-Testing\LEAPv1.7.1\Makefile [debug] Error 2

10:43:38: The process "C:\Qt\Qt5.3.1\Tools\QtCreator\bin\jom.exe" exited with code 2.

Error while building/deploying project LEAPv1.7.1 (kit: Desktop Qt 5.3 MSVC2010 OpenGL 32bit) When executing step 'Make'

10:43:38: Elapsed time: 00:03.

我不知道该怎么办。我只想向类中添加一个整数,这样我就不必在内部维护另一个表。显然我不明白我在这里做什么!

最佳答案

从您的类中删除 Q_OBJECT 宏。您应该只在派生自 QObject 的类中使用 Q_OBJECTQListWidgetItem 不是从 QObject 派生的,所以 MyListWidgetItem 不是从 QObject 派生的。

关于c++ - 继承 QListWidgetItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090007/

相关文章:

c++ - 如何从 64 位进程或 64 位 dll 访问 32 位 dll

c++ - 为什么我的 PIC 的 LED 不闪烁?

请C++ cout输出解释

c++ - QDesktopServices::openUrl 与资源

c++ - 如果路径包含空格(在 "apt-get upgrade"之后),QDesktopServices::openUrl() 将失败

c++ - 信号/槽基类多继承

c++ - CppUnitTestFramework 和测试 "vector subscript out of range"

c++ - 输入到文本文件

android - 跨平台的 WebView 。架构师观点?

qt - 使用QFileSystemModel仅显示一个目录