Russian Qt Forum
Май 05, 2024, 00:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Сравнение строк  (Прочитано 10943 раз)
vanix
Гость
« : Июнь 08, 2011, 16:24 »

Вообщем строки не сравниваются хотя имеют одинаковое значение
Код:
bool VEContainer::searchObject(QTreeWidgetItem *item){
    foreach(VEWall obj, objectWallList){
        if (obj.getName() == item->text(0)){
            findWall = &obj;
            return true;
        }
    }
    return false;
}
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 08, 2011, 16:31 »

1) Непечатных символов нет?
2) obj.getName() покажите
Записан
vanix
Гость
« Ответ #2 : Июнь 08, 2011, 16:38 »

Это абстрактный класс от которого наследуется VEWall;
header:
Код:
#ifndef VETYPE_H
#define VETYPE_H

#include "veobject.h"
#include <QString>

class VEType : public VEObject{
private:
    //fields
    QString name;

    //methods

protected:
    //fields

    //methods

public:
    //fields

    //methods
    VEType(QString name0 = 0);
    void setName(QString name0);
    QString getName();

};

#endif // VETYPE_H

cpp:
Код:
#include "vetype.h"

VEType::VEType(QString name0):
    VEObject(){
    name = name0;
}

void VEType::setName(QString name0){
    name = name0;
}

QString VEType::getName(){
    return name;
}
главное что стоит отметить, когда добавляется item в качестве текста берется name объекта VEWall
Записан
vanix
Гость
« Ответ #3 : Июнь 08, 2011, 16:50 »

может имеется метод сравнения строк как, например, в java equals, хотя почитал документацию к QString и не нашел ничего подобного
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #4 : Июнь 08, 2011, 17:05 »

qDebug'ом выведите. я тут вижу как минимум косяк с тем, что вы получаете адрес локальной переменной, но на сравнение это влиять не должно. и кода маловато
Записан
vanix
Гость
« Ответ #5 : Июнь 08, 2011, 17:09 »

я тут вижу как минимум косяк с тем, что вы получаете адрес локальной переменной
поконкретней, пожалуйста.
Записан
Fat-Zer
Гость
« Ответ #6 : Июнь 08, 2011, 17:11 »

посмотрите, size() у них одинаковый или нет...
и ещё get/setName лучше передавать/получать по ссылке.
« Последнее редактирование: Июнь 08, 2011, 17:13 от Fat-Zer » Записан
vanix
Гость
« Ответ #7 : Июнь 08, 2011, 17:21 »

size одинаковый
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #8 : Июнь 08, 2011, 17:28 »

&obj;
Записан
vanix
Гость
« Ответ #9 : Июнь 08, 2011, 17:32 »

&obj;
а так нельзя делать?
Записан
sendevent
Гость
« Ответ #10 : Июнь 08, 2011, 17:34 »

может имеется метод сравнения строк как, например, в java equals, хотя почитал документацию к QString и не нашел ничего подобного
QString::compare - не то?
---
и вот еще:
QString::localeAwareCompare
« Последнее редактирование: Июнь 08, 2011, 17:37 от sendevent » Записан
vanix
Гость
« Ответ #11 : Июнь 08, 2011, 17:46 »

через compare заработало, можно закрыть тему, а можно еще поразбираться, могу предоставить необходимые исходники.
спасибо всем и в частности sendevent. Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #12 : Июнь 08, 2011, 17:52 »

нет, не заработало. компаре возвращает 0 (фолс) если строки равны.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #13 : Июнь 08, 2011, 17:57 »

&obj;
а так нельзя делать?
ты сохраняешь ссылку на локальную переменную, а так делать нельзя. раз у тебя массив всех возможных значений уже есть, не проще ли просто запомнить индекс искомого элемента?

хм, может я и не прав...
« Последнее редактирование: Июнь 08, 2011, 17:59 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
vanix
Гость
« Ответ #14 : Июнь 08, 2011, 18:14 »

&obj;
а так нельзя делать?
ты сохраняешь ссылку на локальную переменную, а так делать нельзя. раз у тебя массив всех возможных значений уже есть, не проще ли просто запомнить индекс искомого элемента?

хм, может я и не прав...
проблемка в том что класс VEContainer содержит списки объектов разных типов в том числе vewall и vecontainer, в свою очередь объекты типа vecontainer использут ту же организацию. при поиске по имени легче вернуть и сохранить ссылку на объект чем указывать индекс и к какому конкретному списку конкретного контейнера относится индекс: что бы было понятно приведу следующую схему:
VEContainer con1
  QList<VEWall> // wall1, wall2, wall3
  QList<VEContainer>
  // con2
    //QList<VEWall> //wall4, wall5, wall6
    //QList<VEContainer>  //con3
  // con4
    .......
Проходя по всей иерархии мы в итоге возвращаем ссылку в con1
Вообщем это может быть непонятно, и возможно я не прав, так как использую qt меньше полгода и не знаю всех нюансов.
« Последнее редактирование: Июнь 08, 2011, 18:26 от vanix » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.