Qt cpp 遍历 QVector<DisplayWnd *> m_vecWidget;
时间: 2024-03-16 14:46:12 浏览: 70
遍历QVector的方法有很多种,可以使用下标访问,也可以使用迭代器,还可以使用C++11中的range-based for循环。具体代码如下:
使用下标访问:
```cpp
for (int i = 0; i < m_vecWidget.size(); ++i)
{
DisplayWnd* widget = m_vecWidget[i];
// 对widget进行操作
}
```
使用迭代器:
```cpp
for (QVector<DisplayWnd*>::iterator it = m_vecWidget.begin(); it != m_vecWidget.end(); ++it)
{
DisplayWnd* widget = *it;
// 对widget进行操作
}
```
使用range-based for循环:
```cpp
for (DisplayWnd* widget : m_vecWidget)
{
// 对widget进行操作
}
```
无论使用哪种方法,都可以遍历m_vecWidget中的每个元素,对其进行操作。
相关问题
Qt cpp 遍历list<string> camList 将元素放入QVector<QString> m_vecGuids
可以使用C++11中的range-based for循环来遍历camList,并将元素添加到m_vecGuids中。具体代码如下:
```cpp
#include <QtCore/QString>
#include <QtCore/QVector>
#include <list>
#include <string>
int main()
{
std::list<std::string> camList = {"cam1", "cam2", "cam3"};
QVector<QString> m_vecGuids;
for (const auto& cam : camList)
{
m_vecGuids.append(QString::fromStdString(cam));
}
return 0;
}
```
在循环中,我们使用了`const auto&`来声明一个常量引用,以便在循环中访问camList中的每个元素。然后,我们使用`QString::fromStdString()`将std::string类型的cam转换为QString类型,并将其添加到m_vecGuids中。
qt5的struct MyStruct1 { int x; int y; }; struct MyStruct2 { int x; QString y; }; // 定义一个模板类(泛型类),使用 MyStruct1 和 结构体作为类型参数 template<typename T> class MyTemplateClass { public: MyTemplateClass(T t) : m_t(t) {} T value() const { return m_t; } private: T m_t; QMap<QString,QVector<T>>t_map; QMap<QString,QVector<T>>old_map; QCache<QString,QVector<T>>t_cache; QVector<T>t_vctor; };请提供比较t_vctor的遍历和打印,判断MyStruct1 的x值>0
可以使用迭代器遍历和打印t_vctor,具体代码如下:
```cpp
template<typename T>
void printVector(const QVector<T>& vec) {
for (auto it = vec.begin(); it != vec.end(); ++it) {
qDebug() << *it;
}
}
MyTemplateClass<MyStruct1> myClass1(MyStruct1{1, 2});
myClass1.t_vctor.append(MyStruct1{3, 4});
myClass1.t_vctor.append(MyStruct1{5, 6});
printVector(myClass1.t_vctor); // 遍历并打印t_vctor
```
判断MyStruct1的x值是否大于0,可以使用if语句,具体代码如下:
```cpp
if (std::is_same<T, MyStruct1>::value) {
if (m_t.x > 0) {
qDebug() << "MyStruct1 x > 0";
} else {
qDebug() << "MyStruct1 x <= 0";
}
}
```
完整代码如下:
```cpp
#include <QDebug>
#include <type_traits>
struct MyStruct1 { int x; int y; };
struct MyStruct2 { int x; QString y; };
template<typename T>
class MyTemplateClass {
public:
MyTemplateClass(T t) : m_t(t) {}
T value() const { return m_t; }
private:
T m_t;
QMap<QString, QVector<T>> t_map;
QMap<QString, QVector<T>> old_map;
QCache<QString, QVector<T>> t_cache;
QVector<T> t_vctor;
};
template<typename T>
void printVector(const QVector<T>& vec) {
for (auto it = vec.begin(); it != vec.end(); ++it) {
qDebug() << *it;
}
}
int main(int argc, char *argv[]) {
Q_UNUSED(argc)
Q_UNUSED(argv)
MyTemplateClass<MyStruct1> myClass1(MyStruct1{1, 2});
myClass1.t_vctor.append(MyStruct1{3, 4});
myClass1.t_vctor.append(MyStruct1{5, 6});
printVector(myClass1.t_vctor); // 遍历并打印t_vctor
if (std::is_same<MyStruct1, MyStruct1>::value) {
if (myClass1.value().x > 0) {
qDebug() << "MyStruct1 x > 0";
} else {
qDebug() << "MyStruct1 x <= 0";
}
}
return 0;
}
```
阅读全文