crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Xml - обращение к дочернему элементу
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Kagami Дата 13.4.2009, 18:59
  Если бы я заметил что в середине обсуждения у тебя поменялся xml-файл все решилось бы быстрее :)
Litkevich Yuriy Дата 13.4.2009, 15:14
 
Цитата(FladeX @ 13.4.2009, 18:15) *
Отдельное спасибо Kagami за помощь
кни ему "Спасибу"
FladeX Дата 13.4.2009, 14:15
  Возвращает int.

Но я уже решил проблему:
Вместо этого:
    QString pageid = "page" + QString("%1").arg(1,2,10,QChar('0'));

прописал старое:
    QString pageid = QString::number(currentId());

и все заработало! Отдельное спасибо Kagami за помощь :)
Kagami Дата 10.4.2009, 18:25
  А какие значение возвращает currentId() ?
FladeX Дата 10.4.2009, 15:00
  Не совсем понял, какую переменную мы создаем в условии...
Перенес из цикла все что только можно было вынести - результат тот же (пустое модальное окно). Перенес вызов QMessageBox внутрь цикла - модальное окно вообще перестало вызываться.
Kagami Дата 9.4.2009, 13:25
  Из-за области видимости переменной. Если ее создавать в условии, то в его конце она будет удалена
FladeX Дата 9.4.2009, 11:46
  Спасибо за развернутый ответ! Теперь понятнее стало.
Однако, погоняв эту функцию, заметил, что условие
        if (child.attribute("id") == pageid)

всегда ложно. То есть если внутри этого условия задавать переменную message, то в программе ничего не будет выведено, так как этот участок кода никогда не отработает. А если задавать message вне условной конструкции, то все ок. Почему же так происходит? Может условие не совсем корректное?
Kagami Дата 8.4.2009, 21:59
  Посидел десять минут, но раскусил этот орешек:
Раскрывающийся текст
void ExpertSystem::showHelp()
{
static QString lastHelpMessage;

QString message;
QDomDocument doc;
QFile file("/home/opensuse/qt/expertsystem/help.xml");
if (!file.exists())
{
QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 001. Файл help.xml не существует"));
}
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 002. Невозможно открыть файл help.xml"));
return;
}
if (!doc.setContent(&file))
{
QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 003. Невозможно прочитать файл help.xml"));
file.close();
return;
}
//Второй раз устанавливать содержимое не надо
doc.setContent(&file);


// В результате получим pageid равное числу...
QString pageid = QString::number(currentId());
QString pageid = "page" + QString("%1").arg(1, 2, 10, QChar('0'));

//Вот нафига заводить еще один документ? Если мы уже все загрузили в doc
QDomDocument domDocument;
QDomElement root = domDocument.documentElement();

QDomElement root = doc.documentElement();
//help у нас корневой элемент и уже содержится в root. Второй раз его искать не надо
QDomElement help = root.firstChildElement("help");
//С учетом вышесказанного эта строка не правильная
QDomElement child = help.firstChildElement("page");
QDomElement child = root.firstChildElement("page");

while (!child.isNull())
{
if (child.attribute("id") == pageid)
{
QDomElement mess = child.firstChildElement("message");
message = mess.text();
//message = pageid;
}
child = child.nextSiblingElement("page");
}
file.close();

//if (lastHelpMessage == message)
// message = tr("");

QMessageBox::information(this, QObject::trUtf8("Подсказка"), message);

lastHelpMessage = message;
}


P.S. Жалко что нельзя раскрашивать код, только так :(
FladeX Дата 8.4.2009, 11:59
  Вот функция целиком:
cpp
void ExpertSystem::showHelp()
{
    static QString lastHelpMessage;

    QString message;
    QDomDocument doc;
    QFile file("/home/opensuse/qt/expertsystem/help.xml");
    if (!file.exists())
    {
        QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 001. Файл help.xml не существует"));
    }
    if (!file.open(QIODevice::ReadOnly))
    {
        QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 002. Невозможно открыть файл help.xml"));
        return;
    }
    if (!doc.setContent(&file))
    {
        QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 003. Невозможно прочитать файл help.xml"));
        file.close();
        return;
    }
    doc.setContent(&file);

    QString pageid = QString::number(currentId());

    QDomDocument domDocument;
    QDomElement root = domDocument.documentElement();
    QDomElement help = root.firstChildElement("help");
    QDomElement child = help.firstChildElement("page");
    while (!child.isNull())
    {
        if (child.attribute("id") == pageid)
        {
            QDomElement mess = child.firstChildElement("message");
            message = mess.text();
            //message = pageid;
        }
        child = child.nextSiblingElement("page");
    }
    file.close();

    //if (lastHelpMessage == message)
    //    message = tr("");

    QMessageBox::information(this, QObject::trUtf8("Подсказка"), message);

    lastHelpMessage = message;
}
Kagami Дата 7.4.2009, 17:19
  В приведенном выше кусочке вроде ошибок не видно. Было бы неплохо глянуть на весь код этой процедуры
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 22:10