首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5错误:“ColorKeyMap”没有命名类型

问Qt5错误:“ColorKeyMap”没有命名类型
EN

Stack Overflow用户
提问于 2019-02-25 11:14:11
回答 1查看 240关注 0票数 0

我正在编写一个具有以下结构的类:

头文件:

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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()
}

当我编译这段代码时,我会得到以下错误:

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-25 13:39:35

您的代码中有几个错误。

  1. 主要问题是要修改某个*键,即23颜色的值,即QColor( 0xff, 0x00, 0xff ); 问题是,尽管您可以像以前一样在类之外初始化私有静态成员,但是您不能在以后修改它。你甚至不能在课外阅读它。以后只能通过类VirtualButton的成员函数访问它。

幸运的是,这里还有工作要做。可以使用静态函数(即initColorKeyMap())初始化静态成员ColorKeyMap,如下面的代码所示。

virtualbutton.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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,还有一些小的修正和一些额外的代码。(添加了代码后,我想测试Button类,直到我意识到它不是从QPushButton派生出来的,所以我无法在小部件上显示VirtualButton。只是后来才意识到。无论如何,这与眼前的真正问题没有任何关系。代码使用正确初始化的ColorKeyMap__进行编译)

main.cpp

代码语言:javascript
复制
#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();
}

除此之外,代码编译时没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54864947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档