crossplatform.ru

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


  Ответ в Ошибка повторного открытия QSWorkbench
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
JohnZ Дата 6.8.2014, 19:12
  Ура ! Заработало !
Вопрос решился правкой исходников QSA !
Добавил я ему
void closeEvent(QCloseEvent *event);
и отправляю сей эвент в игнор :) ес-сно с уведомлением парента.

Вопрос закрыт !!!
JohnZ Дата 2.8.2014, 12:06
  До минимального уже далековато, но попробую. Не обещаю это сделать быстро. Мыло есть ?
В принципе, могу и весь слить, судя по ответам в другой ветке, вы видимо сможете оказать
посильную помощь в дальнейшей разработке технологии ... ?!
За основу взяты примеры mdi и simpledommodel из qt 4.5.3, и ес-сно "Ананас". С ним знакомы ?
Собранная либа QSA 1.2.3 есть ? Ведь без неё никак. Компилю из крейтора 1.2.90.
lanz Дата 1.8.2014, 19:52
  Можно создавать QSWorkbench в editAll, если он удален. Чтобы последить за ним, можно использовать QPointer http://qt-project.org/doc/qt-4.8/qpointer.html.
Но как то это выглядит костыльно. Можете приложить минимальный проект, побаловаться?
JohnZ Дата 1.8.2014, 10:27
  Так точно ! Указатель (и память) QSWorkbench остались, а он сам удалён.
В родительском виджете хранить низзя, по причине MDI, - он (QSWorkbench) принадлежит дочернему окну,
т.е. открытому проекту. В АРР можно открыть несколько проектов, и дрыг\драп между-ними "куски" ...
У каждого проекта свой (отдельный) QSWorkbench !
Т.е. я так понимаю трабл нерешаем, или придётся переписывать QSWorkbench ?
lanz Дата 31.7.2014, 18:57
  Насколько я понимаю, при закрытии удаляется QSWorkbench? Почему бы тогда не хранить его в родительском виджете?
JohnZ Дата 31.7.2014, 13:54
  Здравия Всем !

Помогите решить проблему "вылета" арр при повторном открытии QSA QSWorkbench.

Код. Всё "лишнее" убрано, ес-сно ...
class MdiChild : public QTreeView
{
    Q_OBJECT

public:
    MdiChild(QWidget *parent = 0);
    ~MdiChild();

protected:
    void closeEvent(QCloseEvent *event);
    void contextMenuEvent(QContextMenuEvent *event);
    void mouseDoubleClickEvent ( QMouseEvent * event );

private:
    DomModel *model;

//  !!! Трабл начинается тут !!! Т.к. у QSWorkbench НЕТ конструктора по умолчанию,

    QSScript        *qsa_scr;
    QSProject       *qsa_prj;
    QSWorkbench  *qsa_wbh;
};

////////////////////////////////////////////////////////////////////////////////////////

MdiChild::MdiChild(QWidget *parent) : QTreeView(parent)
{
    setAttribute(Qt::WA_DeleteOnClose);

    qsa_prj = new QSProject(this);
    qsa_wbh = new QSWorkbench(qsa_prj, this); // Т.к. у него НЕТ конструктора по умолчанию !!!
}

MdiChild::~MdiChild()
{
    delete  qsa_wbh;
    delete  qsa_prj;
    delete  model;
}

////////////////////////////////////////////////////////////////////

void MdiChild::editAll()
{
    QString fName, sCode;
    QModelIndex index = selectedIndexes().first(); // QItemSelectionModel::
    DomItem *item = static_cast<DomItem*>(index.internalPointer());

    if ((item->Idc >= 60) && (item->Idc <= 69)) // Script-s
    {
        if (item->Idc == 60)    // Global Script-s
        {
            fName = QString("qsglobal.qsa");
            sCode = model->getText(item->node().toElement(), "qsacode");
        }
        else
        {
            fName = QString("scr%1-%2.qsa").arg(item->Idc).arg(item->Idd);
            sCode = QString("// script\n %1").arg(item->node().toElement().text());
        }


        qsa_scr = qsa_prj->createScript(fName, sCode);
        qsa_scr->setCode ( sCode );
        qsa_wbh->showScript(qsa_scr);   //  <- Вот здесь вылетает в ошибку при повторном входе
        qsa_wbh->open();
        return;
    }

    QMessageBox::warning(this, tr("Дизайнер"), tr("Что собрался редактировать ?"));
}


Порядок действий для получения ошибки такой, - выбираем в окне QTreeView скрипт на
редактирование. Открывается QSA QSWorkbench. Можем выбрать другой скрипт, он
добавится в QSWorkbench второй вкладкой. И теперь если закрыть окно QSWorkbench
нажав на крестик в правом углу, а затем выбрать любой скрипт в окне QTreeView на
редактирование, то наблюдается стабильный вылет в отладчик.
Помогите решить сей трабл, плз. Я понимаю, что с логикой напутал, но по-другому
не получается, по причине отсутствия у QSA QSWorkbench конструктора по умолчанию.
Не переписывать-же его ...
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 9:21