gpt4 book ai didi

c++ - (Qt C++)暂时 “disable” 2d map 中的一个键吗?

转载 作者:行者123 更新时间:2023-12-02 10:08:52 27 4
gpt4 key购买 nike

我正在一个有2d map 的项目中:

QMap < int, QMap < int, QPixmap> > slot_pic;

我设置了一个表来初始化值:
slot_pic[0][0] = QPixmap("path...");
slot_pic[1][0] = QPixmap("path...");
slot_pic[2][0] = QPixmap("path...");
slot_pic[3][0] = QPixmap("path...");
...

有时,第二个键会像这样更改:
...
slot_pic[300][0] = QPixmap("path...");
slot_pic[300][1] = QPixmap("path...");
slot_pic[300][2] = QPixmap("path...");
slot_pic[300][3] = QPixmap("path...");
slot_pic[301][0] = QPixmap("path...");
...

在程序的某个时刻,我遇到了一个只想看第一个数字的键。像素图的路径则仅取决于第一个键。像这样:
...
slot_pic[357][0] = QPixmap("path...");
slot_pic[358] = QPixmap("path...");
slot_pic[359][0] = QPixmap("path...");
...

但是很明显,我收到语法错误。如果该键是我定义的数字,如何告诉我的程序仅查看第一个键? (358)我每次都可以这样写一千遍:
...
slot_pic[358][1] = QPixmap("path...");
slot_pic[358][2] = QPixmap("path...");
...
slot_pic[358][50] = QPixmap("path...");
slot_pic[358][55] = QPixmap("path...");
...

因此,基本上,如何使2D map 仅依赖于一个键?

注意:我不想更改第二个键的值,稍后在我的程序中需要它。我只想停止查看 map 中的某个键。

我试图尽我所能解释。任何帮助,将不胜感激 :)

最佳答案

方法1

使一个类具有2D vector 或2D map 的基础容器,但具有所需的所有访问器方法。

C++ multidimensional array operator

Operator[][] overload

然后,您可以在一个访问器方法的中间插入一个if语句,并使它返回空值或默认值,而不是存储的值(如果您以这种方式打开它的话)。

方法二

除了将pixmap存储在 map 中之外,还应存储一个结构,该结构除了具有pixmap之外,还具有诸如已打开或关闭的信息。

struct MyPixmap
{
bool enabled;
QPixmap pixmap;
}

方法3

将 map 的外层指向具有默认自变量系统的结构或类,以及指向 map 的功能。

希望能有所帮助。让我知道您是否需要更多信息或其中之一的更好示例。

编辑:这是一些使方法3起作用的代码。它使用模板。希望这是有道理的。您可能应该为MyMap实现一个复制构造函数,以及一个析构函数……但是如果没有它,它可能会起作用。

http://www.cplusplus.com/doc/tutorial/templates/

main.cpp
#include <QApplication>
#include "mymap.h"
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QMap < int, MyMap < int, QString> > slot_pic;

slot_pic[0][0] = "0,0";
slot_pic[1][0] = "1,0";
slot_pic[2][0] = "2,0";
slot_pic[3][0] = "3,0";

slot_pic[300][0] = "300,0";
slot_pic[300][1] = "300,1";
slot_pic[300][2] = "300,2";
slot_pic[300][3] = "300,3";
slot_pic[301][0] = "301,0";

slot_pic[357][0] = "357,0";
slot_pic[358][0] = "358,0";
slot_pic[359][0] = "359,0";

// slot_pic[358].default_value() = slot_pic[0][0];

// slot_pic[357][1] = slot_pic[358].default_value();

qDebug() << slot_pic;

qDebug() << slot_pic[358].default_value();

qDebug() << slot_pic[300].default_value();

return a.exec();
}

mymap.h
#ifndef MYMAP_H
#define MYMAP_H

#include <QMap>

template <class Key, class T>
class MyMap : public QMap <Key, T>
{
public:
MyMap();

T & operator[] ( const Key & key );

T & default_value ();
private:
Key m_default_key;
};

// Since template classes are generated
// on demand by the compiler, the implementation should
// stay in this class.

template <typename Key, typename T>
MyMap <Key, T>::MyMap(): QMap<Key, T>()
{

}

template <class Key, class T>
T & MyMap <Key, T>::operator[] ( const Key & key )
{
// Store the key and use it as a default

m_default_key = key;

return QMap::operator [](key);
}

template <class Key, class T>
T & MyMap <Key, T>::default_value ()
{
return QMap::operator [](m_default_key);
}

#endif // MYMAP_H

关于c++ - (Qt C++)暂时 “disable” 2d map 中的一个键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17645075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com