(Qt C++)暂时"disable" 2D 地图中的一个键?
(Qt C++) Temporarily "disable" one key in a 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...");
...
所以基本上,我如何才能制作一个只依赖于一个键的二维地图?
注意:我不想更改第二个键的值,这是我的程序稍后需要的。我只想在地图上的某个关键点停止看它。
我尽力解释这一点。如有任何帮助,我们将不胜感激:)
方法1
生成一个类,该类具有二维向量或二维映射的基础容器,但具有所需的所有访问器方法。
C++多维数组运算符
操作员[][]过载
然后,您可以在其中一个访问器方法的中间抛出一个if语句,并让它返回一个空值或默认值,而不是存储的值,如果您这样启用它的话。
方法2
不要在地图中存储像素图,而是存储一个结构,该结构除了像素图之外,还包含诸如它是打开还是关闭之类的信息。
struct MyPixmap
{
bool enabled;
QPixmap pixmap;
}
方法3
让映射的外层指向一个结构或类,该结构或类除了可以指向映射之外,还具有默认的参数系统。
希望能有所帮助。如果你需要更多信息或更好的例子,请告诉我。
编辑:下面是一些让方法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
相关文章:
- 一个 2D 数组,并按行存储值.第一个循环用于行索引,第二个循环用于列索引
- 填充另一个 2D 数组后,堆已损坏
- 如何编写一个简单的CGAL代码来隔离一个2D矩形
- C++将 2D 阵列的一部分复制到另一个 2D 阵列,性能
- 从给定的行和列中生成一个2D整数数组
- 尝试创建一个2D数组,其大小仅在C 中的运行时才知道
- 在C#和C++之间发送一个2D int数组
- C 设置构造器中的数组大小,复制一个2D数组
- 从QTScript操纵一个2D阵列
- Qt:如何制作一个2d插值颜色的字段
- 通过一个函数传递一个2D数组,我得到一个错误
- 无法从 2D 数组执行从 2D 数组到另一个 2D 数组的 strcpy
- 使用 STRCPY 将 2d 字符数组复制到另一个 2d 数组中
- 如何在c++中返回一个2d数组的指针
- 我想找到一个2d数组C++中每一行的最大值
- 将一个2d动态数组传递给C++中的一个函数
- 将一个2d数组指针传递给一个函数,并在函数内部分配内存
- 将多维数组随机化(随机播放)为另一个 2D 数组
- 想要移动一个2d对象而不是另一个
- 将一个2D数组分配给另一个