crossplatform.ru

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

> Сегфолт при смене центрального виджета QMainWindow
Andrewshkovskii
  опции профиля:
сообщение 16.2.2009, 13:17
Сообщение #1


Активный участник
***

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

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




Репутация:   1  


Есть у меня QMainWindow. в нем отображается QWidget(MainWidget), c 3мя кнопочками. 1-ая кнопочка - Делает центральным (setCentraWidget) ещё один QWindget(Test1Widget). в этом виджите 2 кнопочки, одна не активна пока-что, другая должна возвращать фокус на MainWidget. делаю я это так :
описываю слот :
void ColorTest::BackToMainWindow()
{
    this->setCentralWidget(MainWidget);// this - указатель на мой QMainWindow
}


и соединяю с сигналом :

void ColorTest::SetConnectionsForTest1()
{
    //connect(SubmitAnswerTest,SIGNAL(clicked()),)
    connect(AbortTest1Button,SIGNAL(clicked()),this,SLOT(BackToMainWindow()));
}


Но при нажатии кнопочки AbotTest1Button - приложение завершается с ошибкой. В чем проблема?Ведь я менял центральный на test1Widget без проблем, а обратно - фиг. Может надо закрывать не "централизованные" виджеты?Пробывал - тоже самое.. в чем может быть проблема?

Сообщение отредактировал Litkevich Yuriy - 16.2.2009, 13:29
Причина редактирования: вместо параметра C++ используй cpp (англ.)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2009, 17:10
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


можешь и без панели инструментов:
в качестве центрального виджета ставишь стэк виджетов (QStackedWidget), на него свои кнопки и прочее, кнопки соединяешь с картой сигналов (QSignalMapper), а его сигнал со слотом смены страниц стэка виджетов:
// ====== в объявлении класса главного окна ======
QStackedWidget *mainWgt;
QWidget *page1;
QWidget *page2;
QPushButton *btn1;
QPushButton *btn2;
QSignalMapper *signalMapper;
// ========================

// ====== в конструкторе главного окна ======
signalMapper = new QSignalMapper(this);
mainWgt = new QStackedWidget();
setCentralWidget(mainWgt);

// Первая страница
page1 = new QWidget();
btn1 = new QPushButton(page1);
connect(btn1, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(btn1, 2); // 2- номер страницы в стеке виджетов на которую нужно перейти

// вторая страница
page2 = new QWidget();
btn2 = new QPushButton(page2);
connect(btn1, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(btn2, 1); // 1- номер страницы в стеке виджетов на которую нужно перейти


stackedWidget->addWidget(page2);
stackedWidget->addWidget(page1);
connect(signalMapper, SIGNAL(mapped(int)),
        mainWgt,         SIGNAL(setCurrentIndex(int)));
// ========================
помоему все просто
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Andrewshkovskii   Сегфолт при смене центрального виджета QMainWindow   16.2.2009, 13:17
- - Andrewshkovskii   void QMainWindow::setCentralWidget ( QWidget * wid...   16.2.2009, 14:00
- - Litkevich Yuriy   а зачем тебе вообще менять центральный виджет?   16.2.2009, 14:14
- - Andrewshkovskii   Ну есть центральный виджет, в нем 2 кнопочки : Тес...   16.2.2009, 14:15
- - Litkevich Yuriy   Цитата(Andrewshkovskii @ 16.2.2009, 17:15...   16.2.2009, 14:17
- - Andrewshkovskii   Я нечайно там ctrl+Enter нажал, привыч перевода но...   16.2.2009, 14:20
- - Litkevich Yuriy   поставь центральный виджет, на панель инструментов...   16.2.2009, 14:20
- - Andrewshkovskii   То есть решение попроще отсутствует?..   16.2.2009, 14:22
- - Litkevich Yuriy   Цитата(Andrewshkovskii @ 16.2.2009, 17:22...   16.2.2009, 16:08
- - Litkevich Yuriy   можешь и без панели инструментов: в качестве центр...   16.2.2009, 17:10
- - Andrewshkovskii   Щас попробуюСпасибо.а вот то что виджеты уничтожаю...   16.2.2009, 18:08
- - Litkevich Yuriy   Цитата(Andrewshkovskii @ 16.2.2009, 21:08...   16.2.2009, 18:32
- - Andrewshkovskii   Ну я пробовал запустить - будет ошибка приложения,...   16.2.2009, 18:48
- - Andrewshkovskii   Немного подыму старую тему. Скажу честна - сел раз...   7.3.2009, 18:46


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


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




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