我正在写一个具有以下结构的类:
标题文件:
#pragma once
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
class VirtualButton : public QWidget {
Q_OBJECT
public:
VirtualButton( QWidget *parent );
private:
static QMap<unsigned int, QColor> ColorKeyMap;
static QList<unsigned int> goodKeys;
};
cppfile
#include "VirtualButton.hpp"
QMap<unsigned int, QColor> VirtualButton::ColorKeyMap = QMap<unsigned int, QColor>();
ColorKeyMap[ 23 ] = QColor( 0xff, 0x00, 0xff );
QList<unsigned int> VirtualButton::goodKeys = QList<unsigned int>() << 50 << 62 << 37 << 133 << 64 << 108 << 135 << 109;
VirtualButton::VirtualButton( QWidget *parent ) : QWidget( parent ) {
setFixedSize( 48, 48 );
};
int main( int argv, char **argv ) {
QApplication app( argc, argv );
VirtualButton *btn = new VirtualButton();
btn->show();
return app.exec()
}
编译此代码时,我会收到以下错误:
VirtualKeyboard.cpp:4:1: error: ‘ColorKeyMap’ does not name a type; did you mean ‘QColormap’?
ColorKeyMap[ 23 ] = QColor( 0xff, 0x00, 0xff );
^~~~~~~~~~~
QColormap
为什么出现此错误?我可以看到Goodkeys没有问题,但是ColorKeyMap确实有问题。这是因为不应该在班级外使用QColor吗?
您的代码中有几个错误。
-
主要问题是要修改某个键,即
23
颜色的值,即QColor( 0xff, 0x00, 0xff );
问题是,尽管您可以像班级之外的私人静态成员一样初始化班级的私人静态成员,但您稍后不能对其进行修改。您甚至无法稍后在课外阅读。您将来只能通过类
VirtualButton
的成员函数访问它。
幸运的是,周围有工作。您可以使用静态函数(即initColorKeyMap()
)来初始化静态成员ColorKeyMap
,如下所示。
virtualbutton.h
#pragma once
#include <QtWidgets/QtWidgets>
#include <QMap>
#include <QList>
class VirtualButton : public QWidget {
Q_OBJECT
public:
VirtualButton( QWidget *parent );
private:
static QMap<unsigned int, QColor> initColorKeyMap();
static QMap<unsigned int, QColor> ColorKeyMap;
static QList<unsigned int> goodKeys;
};
virtualbutton.cpp
#include "virtualbutton.h"
QMap<unsigned int, QColor> VirtualButton::initColorKeyMap() {
QMap<unsigned int, QColor> temp = QMap<unsigned int, QColor>();
temp[ 23 ] = QColor( 0xff, 0x00, 0xff );
return temp;
}
QMap<unsigned int, QColor> VirtualButton::ColorKeyMap = VirtualButton::initColorKeyMap();
QList<unsigned int> VirtualButton::goodKeys = QList<unsigned int>() << 50 << 62 << 37 << 133 << 64 << 108 << 135 << 109;
VirtualButton::VirtualButton( QWidget *parent ) : QWidget( parent ) {
setFixedSize( 48, 48 );
}
- 您的
main()
中也有几个错误/误差,但我想它们只是较小的侧面问题,而不是您的主要问题。无论如何,这是Main.cpp,还具有较小的更正和一些其他代码。(随着添加编码,我想测试您的按钮类,直到我意识到它不是从qpushbutton衍生而来的,所以我无法在小部件上显示virtualbutton。稍后才意识到。无论如何,它都没有与手头的真实问题有关。代码与正确初始化的ColorKeyMap
)
main.cpp
#include "virtualbutton.h"
#include <QtCore>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(320, 240);
window.setWindowTitle(QApplication::translate("childwidget", "Child widget"));
window.show();
// QPushButton *button = new QPushButton(
// QApplication::translate("childwidget", "Press me"), &window);
VirtualButton *button = new VirtualButton(&window);
// button->move(100, 100);
button->show();
return app.exec();
}
除此之外,代码没有问题。