crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 29.3.2024, 2:42