Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ mdiArea как работать с виджетами

Автор: electronik 26.2.2013, 17:18

в MainWindow создаю

void MainWindow::openDialog(){
    qDebug() << "Click!!!";
    QWidget *widget = new QWidget;
    mdiArea->addSubWindow(widget);
    widget->show();
}


тогда появляется пустой виджет.
Но если через QtCreator создаю новый виджет и пытаюсь его вызвать, но ничего не работает.
void MainWindow::openDialog(){
    qDebug() << "Click!!!";
    residuesCentrWidget widget(this);
    mdiArea->addSubWindow(widget);
    widget->show();
}

Подскажите пожалуйста как решить эту проблему.

Автор: Алексей1153 26.2.2013, 17:30

что означает
1) через QtCreator создаю новый виджет
2) ничего не работает - это что именно ?

содержимое консоли вывода что показывает при компиляции? Или программа запускается, но ничего не показывается ?

Автор: electronik 26.2.2013, 17:54

1) Создаю "Класс формы Qt Desinger", выбираю "Widget".
2) Не компилируется

D:\Devel\fcc\mainwindow.cpp:-1: In member function 'void MainWindow::openDialog()':
D:\Devel\fcc\mainwindow.cpp:34: ошибка: no matching function for call to 'QMdiArea::addSubWindow(residuesCentrWidget&)'

Автор: Алексей1153 26.2.2013, 18:00

mdiArea->addSubWindow(&widget);

а ему указатель надо, а не ссылку

только у тебя после выхода из функции всё упадёт ) Догадаешься, почему ?

Автор: electronik 26.2.2013, 18:15

Спасибо! Заработало!!!
Ничего не упало. А почему должно было упасть?

Автор: Алексей1153 26.2.2013, 18:24

потому что нужно на куче создавать такой виджет, ведь show() - не модальный режим показа

    residuesCentrWidget* widget=residuesCentrWidget(this);
    mdiArea->addSubWindow(widget);
    widget->show();


почему не упало - загадка :) Скорее всего, просто виджет пропал без последствий с заботливой подачи Qt

Автор: electronik 26.2.2013, 18:29

[quote]потому что нужно на куче создавать такой виджет[/quote
Это как?
И еще, виджет вызывается, но почему то пустой.

Автор: Алексей1153 1.3.2013, 19:49

electronik, на куче - это оператором new. Смотри самый первый пост этой темы, верхний блок кода - там всё правильно

Автор: electronik 2.3.2013, 18:05

А как мне вывести виджет созданные через QtCreator?
Создаю "Класс формы Qt Desinger", выбираю "Widget". Как с ними работать? Или все виджеты в ручную создавать?

Автор: Алексей1153 3.3.2013, 22:30

я не понимаю вопрос.

что значит "вывести виджет" ?

Когда визард (или ты сам, вручную) создаёт класс формы, в проекте появляются файлы с именем класса - h, cpp, ui

чтобы где-то иметь доступ к описанию класа, инклудишь заголовочник этого класса. И вперёд )

Автор: electronik 4.3.2013, 12:20

В том то и дело что у меня не работает, диалоги работают, а виджеты нет.
Сделал новы

Сделал новый класс, файлики появились, через дизайнер накидал виджеты , вывожу виджет, а он пустой.
Вот и спрашиваю как, раз пустой может как то не так вызываю его?

Вот исходники что бы было понятней.

 fcc.zip ( 5.52 килобайт ) : 77
 

Автор: lanz 4.3.2013, 12:30

residuesCenterForm widget(this);
residuesFilialForm widget(this);


Нельзя создавать виджет на стеке. Нужно в куче:
residuesCenterForm *widget = new residuesCenterForm;

Автор: electronik 4.3.2013, 13:02

Странно, пробовал так, но почему то не работало, а сейчас заработало. Спасибо!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)