crossplatform.ru

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

> Ошибка повторного открытия QSWorkbench, QSA QSWorkbench
JohnZ
  опции профиля:
сообщение 31.7.2014, 13:54
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Здравия Всем !

Помогите решить проблему "вылета" арр при повторном открытии 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 конструктора по умолчанию.
Не переписывать-же его ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 11:45