Qt-Qt之QMap的使用分析
Qt 分析 使用
2023-09-14 08:57:11 时间
相关资料:
https://blog.csdn.net/markely/article/details/8055961 原文
https://blog.csdn.net/asd1147170607/article/details/105616292 原文
https://download.csdn.net/download/zhujianqiangqq/85798434 CSDN代码包下载
代码实现:
.pro
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 QT += core gui 2 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 4 5 CONFIG += c++11 6 7 # The following define makes your compiler emit warnings if you use 8 # any Qt feature that has been marked deprecated (the exact warnings 9 # depend on your compiler). Please consult the documentation of the 10 # deprecated API in order to know how to port your code away from it. 11 DEFINES += QT_DEPRECATED_WARNINGS 12 13 # You can also make your code fail to compile if it uses deprecated APIs. 14 # In order to do so, uncomment the following line. 15 # You can also select to disable deprecated APIs only up to a certain version of Qt. 16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 17 18 SOURCES += \ 19 main.cpp \ 20 mainwindow.cpp 21 22 HEADERS += \ 23 mainwindow.h 24 25 FORMS += \ 26 mainwindow.ui 27 28 # Default rules for deployment. 29 qnx: target.path = /tmp/$${TARGET}/bin 30 else: unix:!android: target.path = /opt/$${TARGET}/bin 31 !isEmpty(target.path): INSTALLS += target
main.cpp
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include "mainwindow.h" 2 3 #include <QApplication> 4 5 int main(int argc, char *argv[]) 6 { 7 QApplication a(argc, argv); 8 MainWindow w; 9 w.show(); 10 return a.exec(); 11 }
mainwindow.h
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QDebug> 6 7 QT_BEGIN_NAMESPACE 8 namespace Ui { class MainWindow; } 9 QT_END_NAMESPACE 10 11 class MainWindow : public QMainWindow 12 { 13 Q_OBJECT 14 15 public: 16 MainWindow(QWidget *parent = nullptr); 17 ~MainWindow(); 18 19 private slots: 20 void on_pushButton_5_clicked(); 21 22 void on_pushButton_4_clicked(); 23 24 void on_pushButton_10_clicked(); 25 26 void on_pushButton_3_clicked(); 27 28 void on_pushButton_7_clicked(); 29 30 void on_pushButton_6_clicked(); 31 32 void on_pushButton_11_clicked(); 33 34 void on_pushButton_12_clicked(); 35 36 void on_pushButton_13_clicked(); 37 38 void on_pushButton_14_clicked(); 39 40 void on_pushButton_9_clicked(); 41 42 void on_pushButton_8_clicked(); 43 44 void on_pushButton_17_clicked(); 45 46 void on_pushButton_18_clicked(); 47 48 void on_pushButton_2_clicked(); 49 50 void on_pushButton_clicked(); 51 52 void on_pushButton_19_clicked(); 53 54 void on_pushButton_20_clicked(); 55 56 void on_pushButton_21_clicked(); 57 58 void on_pushButton_16_clicked(); 59 60 void on_pushButton_15_clicked(); 61 62 void on_pushButton_22_clicked(); 63 64 void on_pushButton_25_clicked(); 65 66 void on_pushButton_24_clicked(); 67 68 void on_pushButton_23_clicked(); 69 70 void on_pushButton_26_clicked(); 71 72 void on_pushButton_26_clicked(bool checked); 73 74 private: 75 Ui::MainWindow *ui; 76 QMap<QString, int> m_pMap; 77 }; 78 #endif // MAINWINDOW_H
mainwindow.cpp
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 4 MainWindow::MainWindow(QWidget *parent) 5 : QMainWindow(parent) 6 , ui(new Ui::MainWindow) 7 { 8 ui->setupUi(this); 9 10 setWindowTitle(QStringLiteral("Qt之QMap的使用分析")); 11 } 12 13 MainWindow::~MainWindow() 14 { 15 delete ui; 16 } 17 18 void MainWindow::on_pushButton_5_clicked() 19 { 20 m_pMap.insert("key 2", 2); 21 m_pMap.insert("key 0", 0); 22 m_pMap.insert("key 1", 1); 23 } 24 25 void MainWindow::on_pushButton_4_clicked() 26 { 27 m_pMap["333"] = 333; 28 } 29 30 void MainWindow::on_pushButton_10_clicked() 31 { 32 m_pMap.insertMulti("three",4); 33 m_pMap.insertMulti("three",5); 34 m_pMap.insertMulti("three",6); 35 } 36 37 void MainWindow::on_pushButton_3_clicked() 38 { 39 if(!m_pMap.contains("333")) 40 ui->textEdit->append("contains:true"); 41 else 42 ui->textEdit->append("contains:false"); 43 } 44 45 void MainWindow::on_pushButton_7_clicked() 46 { 47 ui->textEdit->append("map[333]:" + QString::number(m_pMap["333"])); 48 } 49 50 void MainWindow::on_pushButton_6_clicked() 51 { 52 QList<QString> skeys = m_pMap.keys(); 53 for(int i = 0; i< skeys.count(); i++) 54 { 55 ui->textEdit->append("skeys:" + skeys[i]); 56 } 57 } 58 59 void MainWindow::on_pushButton_11_clicked() 60 { 61 QList<QString> skeys2 = m_pMap.keys(4); 62 for(int i=0; i < skeys2.count(); i++) 63 { 64 ui->textEdit->append("skeys2:" + skeys2[i]); 65 } 66 } 67 68 void MainWindow::on_pushButton_12_clicked() 69 { 70 QList<int> svalues = m_pMap.values(); 71 for(int i = 0; i < svalues.count(); i++) 72 { 73 ui->textEdit->append("svalues:" + QString::number(svalues[i])); 74 } 75 } 76 77 void MainWindow::on_pushButton_13_clicked() 78 { 79 QList<int> svalues2 = m_pMap.values("three"); 80 for(int i=0; i<svalues2.count(); i++) 81 { 82 ui->textEdit->append("svalues2:" + QString::number(svalues2[i])); 83 } 84 } 85 86 void MainWindow::on_pushButton_14_clicked() 87 { 88 QMapIterator<QString, int> it(m_pMap); 89 while(it.hasNext()) 90 { 91 it.next(); 92 ui->textEdit->append("QMapIterator:" + it.key() + " : " + QString::number(it.value())); 93 } 94 } 95 96 void MainWindow::on_pushButton_9_clicked() 97 { 98 ui->textEdit->append("size:" + QString::number(m_pMap.size())); 99 } 100 101 void MainWindow::on_pushButton_8_clicked() 102 { 103 ui->textEdit->append("count:" + QString::number(m_pMap.count())); 104 } 105 106 void MainWindow::on_pushButton_17_clicked() 107 { 108 ui->textEdit->append("isEmpty:" + QString::number(m_pMap.isEmpty())); 109 } 110 111 void MainWindow::on_pushButton_18_clicked() 112 { 113 QMap<QString,int>::iterator it = m_pMap.find("333"); 114 ui->textEdit->append("find 333:" + QString::number(it.value())); 115 } 116 117 void MainWindow::on_pushButton_2_clicked() 118 { 119 QList <QString> suniqueKeys = m_pMap.uniqueKeys(); 120 for(int i = 0; i < suniqueKeys.count(); i++) 121 { 122 ui->textEdit->append("uniqueKeys:" + suniqueKeys[i]); 123 } 124 } 125 126 void MainWindow::on_pushButton_clicked() 127 { 128 int nfirst = m_pMap.first(); 129 ui->textEdit->append("first:" + QString::number(nfirst)); 130 } 131 132 void MainWindow::on_pushButton_19_clicked() 133 { 134 int nlast = m_pMap.last(); 135 ui->textEdit->append("last:" + QString::number(nlast)); 136 } 137 138 void MainWindow::on_pushButton_20_clicked() 139 { 140 QString firstKey = m_pMap.firstKey(); 141 ui->textEdit->append("firstKey:" + firstKey); 142 } 143 144 void MainWindow::on_pushButton_21_clicked() 145 { 146 QString lastKey = m_pMap.lastKey(); 147 ui->textEdit->append("lastKey:" + lastKey); 148 } 149 // 用Java风格迭代器进行遍历 150 void MainWindow::on_pushButton_16_clicked() 151 { 152 QMapIterator<QString,int> i(m_pMap); 153 i.toFront(); 154 while(i.hasNext()) 155 { 156 ui->textEdit->append("hasNext:" + i.key() + " : " + QString::number(i.next().value())); 157 } 158 i.toBack(); 159 while(i.hasPrevious()) 160 { 161 ui->textEdit->append("hasPrevious:" + i.key() + " : " + QString::number(i.previous().value())); 162 } 163 164 // bool jjj = i.findNext(2); 165 // if (jjj) 166 // qDebug() << "jjj: " << i.key() << i.value(); 167 168 // bool kkk = i.findPrevious(2); 169 // if (kkk ) 170 // qDebug() << "kkk : " << i.key() << i.value(); 171 } 172 // 用STL风格迭代器进行遍历 173 void MainWindow::on_pushButton_15_clicked() 174 { 175 QMap<QString, int>::const_iterator constI; 176 for(constI = m_pMap.cbegin(); constI != m_pMap.cend(); constI++) 177 ui->textEdit->append("constI:" + constI.key() + " : " + QString::number(constI.value())); 178 179 QMap<QString,int>::iterator itI; 180 for(itI = m_pMap.begin();itI != m_pMap.end();itI++) 181 ui->textEdit->append("itI:" + itI.key() + " : " + QString::number(itI.value())); 182 } 183 // 用foreach进行遍历 184 void MainWindow::on_pushButton_22_clicked() 185 { 186 foreach(const QString &str, m_pMap.keys()) 187 ui->textEdit->append("foreach: " + str + " : " + QString::number(m_pMap.value(str))); 188 // 对于多值映射,可以使用两重foreach语句 189 foreach(const QString &str, m_pMap.uniqueKeys()) 190 { 191 foreach(int i, m_pMap.values(str)) 192 ui->textEdit->append("uniqueKeys: " + str + " : " + QString::number(i)); 193 } 194 } 195 196 void MainWindow::on_pushButton_25_clicked() 197 { 198 m_pMap.take("333"); 199 ui->textEdit->append("take: " + QString::number(m_pMap.count())); 200 } 201 202 void MainWindow::on_pushButton_24_clicked() 203 { 204 m_pMap.remove("key 2"); 205 ui->textEdit->append("remove: " + QString::number(m_pMap.count())); 206 } 207 208 void MainWindow::on_pushButton_23_clicked() 209 { 210 m_pMap.clear(); 211 ui->textEdit->append("clear: " + QString::number(m_pMap.count())); 212 } 213 214 static QString getAsciiToString(QMap<QString, int> map, int ascii, int interval, bool isUppercase) 215 { 216 QMap<QString, int>::const_iterator constI; 217 for(constI = map.cbegin(); constI != map.cend(); constI++) 218 { 219 if (constI.value() == ((ascii + interval) % 26)) 220 { 221 if (isUppercase) 222 return constI.key().toUpper(); 223 else 224 return constI.key().toLower(); 225 } 226 } 227 } 228 229 static int getNumToString(int index, int interval) 230 { 231 return (index + interval) % 10; 232 } 233 234 static QString getStringToAscii(QMap<QString, int> map, int ascii, int interval, bool isUppercase) 235 { 236 QMap<QString, int>::const_iterator constI; 237 for(constI = map.cbegin(); constI != map.cend(); constI++) 238 { 239 if (constI.value() == ((ascii + 26 - interval) % 26)) 240 { 241 if (isUppercase) 242 return constI.key().toUpper(); 243 else 244 return constI.key().toLower(); 245 } 246 } 247 } 248 249 static int getStringToNum(int index, int interval) 250 { 251 return (index + 10 - interval) % 10; 252 } 253 254 void MainWindow::on_pushButton_26_clicked() 255 { 256 // 257 QMap<QString, int> oMap; 258 for(int i = 65; i <= 90; ++i) 259 oMap.insert(QChar(i), i-64); 260 261 QString sRrtuen = ""; 262 QString sSrc; 263 264 if (ui->checkBox->isChecked()) 265 sSrc = ui->LNew->text().toUpper(); 266 else 267 sSrc = ui->LSrc->text().toUpper(); 268 269 QByteArray array = sSrc.toLatin1(); 270 for (int i = 0; i < array.size(); ++i) 271 { 272 qDebug() << "array:" <<(int)array.at(i); 273 if (45 == (int)array.at(i)) 274 { 275 // 276 } 277 else if (48 <= (int)array.at(i) && (int)array.at(i) <= 57) 278 { 279 if (ui->checkBox->isChecked()) 280 sRrtuen = sRrtuen + QString::number(getStringToNum(QString(QChar(array.at(i))).toInt(), ui->LNum->value())); 281 else 282 sRrtuen = sRrtuen + QString::number(getNumToString(QString(QChar(array.at(i))).toInt(), ui->LNum->value())); 283 } 284 else 285 { 286 QMap<QString, int>::iterator it = oMap.find(QChar(array.at(i))); 287 288 if (it.value() == 0) 289 continue; 290 291 if (ui->checkBox->isChecked()) 292 sRrtuen = sRrtuen + getStringToAscii(oMap, it.value(), ui->LStr->value(), (i==0)?true:false); 293 else 294 sRrtuen = sRrtuen + getAsciiToString(oMap, it.value(), ui->LStr->value(), (i==0)?true:false); 295 } 296 } 297 if (ui->checkBox->isChecked()) 298 ui->LSrc->setText(sRrtuen); 299 else 300 ui->LNew->setText(sRrtuen); 301 // QMap<QString, int>::const_iterator constI; 302 // for(constI = oMap.cbegin(); constI != oMap.cend(); constI++) 303 // ui->textEdit->append("constI:" + constI.key() + " : " + QString::number(constI.value())); 304 305 // QString s = "A"; 306 // QMap<QString, int>::iterator it = oMap.find(s); 307 // ui->textEdit->append("find a:" + QString::number(it.value())); 308 309 // ui->textEdit->append("find A:" + getAsciiToString(oMap, it.value(), ui->LStr->value(), true)); 310 // ui->textEdit->append("find A:" + getAsciiToString(oMap, it.value(), ui->LStr->value(), false)); 311 312 // int n = 1; 313 // ui->textEdit->append("find n:" + QString::number(getNumToString(n, ui->LNum->value()))); 314 } 315 316 void MainWindow::on_pushButton_26_clicked(bool checked) 317 { 318 319 }
mainwindow.ui
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <ui version="4.0"> 3 <class>MainWindow</class> 4 <widget class="QMainWindow" name="MainWindow"> 5 <property name="geometry"> 6 <rect> 7 <x>0</x> 8 <y>0</y> 9 <width>738</width> 10 <height>313</height> 11 </rect> 12 </property> 13 <property name="windowTitle"> 14 <string>MainWindow</string> 15 </property> 16 <widget class="QWidget" name="centralwidget"> 17 <layout class="QHBoxLayout" name="horizontalLayout"> 18 <item> 19 <layout class="QVBoxLayout" name="verticalLayout"> 20 <item> 21 <widget class="QTextEdit" name="textEdit"/> 22 </item> 23 <item> 24 <layout class="QHBoxLayout" name="horizontalLayout_4"> 25 <item> 26 <widget class="QPushButton" name="pushButton_5"> 27 <property name="text"> 28 <string>增加元素方式1</string> 29 </property> 30 </widget> 31 </item> 32 <item> 33 <widget class="QPushButton" name="pushButton_4"> 34 <property name="text"> 35 <string>增加元素方式2</string> 36 </property> 37 </widget> 38 </item> 39 <item> 40 <widget class="QPushButton" name="pushButton_10"> 41 <property name="text"> 42 <string>增加元素方式3</string> 43 </property> 44 </widget> 45 </item> 46 </layout> 47 </item> 48 <item> 49 <layout class="QHBoxLayout" name="horizontalLayout_2"> 50 <item> 51 <widget class="QPushButton" name="pushButton_3"> 52 <property name="text"> 53 <string>是否已经包含</string> 54 </property> 55 </widget> 56 </item> 57 <item> 58 <widget class="QPushButton" name="pushButton"> 59 <property name="text"> 60 <string>最小键对应的数据</string> 61 </property> 62 </widget> 63 </item> 64 <item> 65 <widget class="QPushButton" name="pushButton_19"> 66 <property name="text"> 67 <string>最大键对应的数据</string> 68 </property> 69 </widget> 70 </item> 71 <item> 72 <widget class="QPushButton" name="pushButton_20"> 73 <property name="text"> 74 <string>最小键</string> 75 </property> 76 </widget> 77 </item> 78 <item> 79 <widget class="QPushButton" name="pushButton_21"> 80 <property name="text"> 81 <string>最大键</string> 82 </property> 83 </widget> 84 </item> 85 </layout> 86 </item> 87 <item> 88 <layout class="QHBoxLayout" name="horizontalLayout_5"> 89 <item> 90 <widget class="QPushButton" name="pushButton_7"> 91 <property name="text"> 92 <string>取值1</string> 93 </property> 94 </widget> 95 </item> 96 <item> 97 <widget class="QPushButton" name="pushButton_6"> 98 <property name="text"> 99 <string>取Keys</string> 100 </property> 101 </widget> 102 </item> 103 <item> 104 <widget class="QPushButton" name="pushButton_11"> 105 <property name="text"> 106 <string>取Keys2</string> 107 </property> 108 </widget> 109 </item> 110 <item> 111 <widget class="QPushButton" name="pushButton_12"> 112 <property name="text"> 113 <string>取values</string> 114 </property> 115 </widget> 116 </item> 117 <item> 118 <widget class="QPushButton" name="pushButton_13"> 119 <property name="text"> 120 <string>取values2</string> 121 </property> 122 </widget> 123 </item> 124 <item> 125 <widget class="QPushButton" name="pushButton_14"> 126 <property name="text"> 127 <string>QMapIterator</string> 128 </property> 129 </widget> 130 </item> 131 <item> 132 <widget class="QPushButton" name="pushButton_18"> 133 <property name="text"> 134 <string>查找find</string> 135 </property> 136 </widget> 137 </item> 138 <item> 139 <widget class="QPushButton" name="pushButton_2"> 140 <property name="text"> 141 <string>uniqueKeys</string> 142 </property> 143 </widget> 144 </item> 145 </layout> 146 </item> 147 <item> 148 <layout class="QHBoxLayout" name="horizontalLayout_6"> 149 <item> 150 <widget class="QPushButton" name="pushButton_9"> 151 <property name="text"> 152 <string>总元素size</string> 153 </property> 154 </widget> 155 </item> 156 <item> 157 <widget class="QPushButton" name="pushButton_8"> 158 <property name="text"> 159 <string>总元素count</string> 160 </property> 161 </widget> 162 </item> 163 <item> 164 <widget class="QPushButton" name="pushButton_17"> 165 <property name="text"> 166 <string>判空isEmpty</string> 167 </property> 168 </widget> 169 </item> 170 </layout> 171 </item> 172 <item> 173 <layout class="QHBoxLayout" name="horizontalLayout_7"> 174 <item> 175 <widget class="QPushButton" name="pushButton_16"> 176 <property name="text"> 177 <string>Java风格迭代器</string> 178 </property> 179 </widget> 180 </item> 181 <item> 182 <widget class="QPushButton" name="pushButton_15"> 183 <property name="text"> 184 <string>STL风格迭代器</string> 185 </property> 186 </widget> 187 </item> 188 <item> 189 <widget class="QPushButton" name="pushButton_22"> 190 <property name="text"> 191 <string>foreach</string> 192 </property> 193 </widget> 194 </item> 195 </layout> 196 </item> 197 <item> 198 <layout class="QHBoxLayout" name="horizontalLayout_8"> 199 <item> 200 <widget class="QPushButton" name="pushButton_25"> 201 <property name="text"> 202 <string>取走take</string> 203 </property> 204 </widget> 205 </item> 206 <item> 207 <widget class="QPushButton" name="pushButton_24"> 208 <property name="text"> 209 <string>移除remove</string> 210 </property> 211 </widget> 212 </item> 213 <item> 214 <widget class="QPushButton" name="pushButton_23"> 215 <property name="text"> 216 <string>清空clear</string> 217 </property> 218 </widget> 219 </item> 220 </layout> 221 </item> 222 <item> 223 <layout class="QHBoxLayout" name="horizontalLayout_3"> 224 <item> 225 <layout class="QHBoxLayout" name="horizontalLayout_9"> 226 <item> 227 <widget class="QLabel" name="label_3"> 228 <property name="text"> 229 <string>字母位</string> 230 </property> 231 </widget> 232 </item> 233 <item> 234 <widget class="QSpinBox" name="LStr"> 235 <property name="maximum"> 236 <number>26</number> 237 </property> 238 <property name="value"> 239 <number>9</number> 240 </property> 241 </widget> 242 </item> 243 <item> 244 <widget class="QLabel" name="label_4"> 245 <property name="text"> 246 <string>数字位</string> 247 </property> 248 </widget> 249 </item> 250 <item> 251 <widget class="QSpinBox" name="LNum"> 252 <property name="maximum"> 253 <number>10</number> 254 </property> 255 <property name="value"> 256 <number>4</number> 257 </property> 258 </widget> 259 </item> 260 </layout> 261 </item> 262 <item> 263 <widget class="QLabel" name="label"> 264 <property name="text"> 265 <string>原值</string> 266 </property> 267 </widget> 268 </item> 269 <item> 270 <widget class="QLineEdit" name="LSrc"> 271 <property name="text"> 272 <string>j-10c</string> 273 </property> 274 </widget> 275 </item> 276 <item> 277 <widget class="QCheckBox" name="checkBox"> 278 <property name="text"> 279 <string>逆转</string> 280 </property> 281 </widget> 282 </item> 283 <item> 284 <widget class="QLabel" name="label_2"> 285 <property name="text"> 286 <string>新值</string> 287 </property> 288 </widget> 289 </item> 290 <item> 291 <widget class="QLineEdit" name="LNew"/> 292 </item> 293 <item> 294 <widget class="QPushButton" name="pushButton_26"> 295 <property name="text"> 296 <string>转换</string> 297 </property> 298 </widget> 299 </item> 300 </layout> 301 </item> 302 </layout> 303 </item> 304 </layout> 305 </widget> 306 </widget> 307 <resources/> 308 <connections/> 309 </ui>
相关文章
- Qt-QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connect...
- QT-Qt界面居中显示
- QT-Qt中MediaPlay的使用,播放视频或MP4
- 如何分析一个QT类
- 在VS2008中使用Qt编程
- Qt编写自定义控件57-直方波形图
- Qt编写地图综合应用39-覆盖物圆形
- Qt重载qdebug输出自定义的信息
- Qt之视图(View)
- Qt 关于QT_BEGIN_NAMESPACE宏的作用
- Qt自定义只读模型
- Qt事件分发机制源码分析之QApplication对象构建过程
- QT多线程实战_Qt多线程开发项目
- Qt源码分析之信号和槽机制
- Qt 多线程QThread实现方法之一
- 9、QT基础——Qt消息机制和事件
- 1、QT基础——Qt概述
- qt之统计中文汉字个数
- Qt学习一门:直接使用QT具
- Qt 中的属性系统(Property System)
- QT creator使用(二):Qt项目建立、编译、运行、发布及移植