crossplatform.ru

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

> создание собственных диалоговых окон
breeve
  опции профиля:
сообщение 30.12.2009, 13:10
Сообщение #1


Участник
**

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

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




Репутация:   1  


У меня тут не большая проблема, с которой в одиночку не могу разобраться. Создал класс который наследуется от QWidget и сделал на нем кнопку. нажимаешь на нее должно появиться диалоговое окно. Создал второй класс наследуемый от QDialog.
И как я понимаю второй окно(диалоговой) должно быть дочерним от виджета.. И вот как раз с этим у меня проблема.
Слот для кнопки запуска второго окна
void Pass::slotSettingsClicked()
{
InputDialog *input = new InputDialog(this);
delete input;
}
inputdialog.h
#ifndef INPUTDIALOG_H
#define INPUTDIALOG_H
#include <QtGui>

class InputDialog : public QDialog
{
Q_OBJECT

public:
InputDialog(QWidget *pwgt);
~InputDialog() {};
};

#endif // INPUTDIALOG_H
inputdialog.cpp
#include "inputDialog.h"
InputDialog::InputDialog(QWidget * pwgt)
: QDialog(pwgt, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
{
}
То окно которое появляется оно пустое..
Мне компилятор выводит
ошибку:
inputDialog.cpp:3: undefined reference to `vtable for InputDialog'

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V   1 2 3 >  
Начать новую тему
Ответов (1 - 9)
berserk
  опции профиля:
сообщение 30.12.2009, 13:20
Сообщение #2


Студент
*

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

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




Репутация:   0  


void Pass::slotSettingsClicked()
{
InputDialog *input = new InputDialog(this);
delete input;
}

разве так можно?

Сообщение отредактировал berserk - 30.12.2009, 13:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 30.12.2009, 13:21
Сообщение #3


Участник
**

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

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




Репутация:   1  


Цитата(berserk @ 30.12.2009, 13:20) *
void Pass::slotSettingsClicked()
{
InputDialog *input = new InputDialog(this);
delete input;
}

разве так можно?

А разве нет? У меня тут пример с книги я от туда все черпал)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
berserk
  опции профиля:
сообщение 30.12.2009, 13:25
Сообщение #4


Студент
*

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

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




Репутация:   0  


насколько я понимаю, new выделяет память для переменной, а delete её освобождает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 30.12.2009, 13:33
Сообщение #5


Участник
**

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

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




Репутация:   1  


Цитата(berserk @ 30.12.2009, 13:25) *
насколько я понимаю, new выделяет память для переменной, а delete её освобождает.
Да правильно ты все понимаешь.
new выделяет память. создается объект. управление передается второму окну. Запускается конструктор. Появляется окно. Пользователь закрывает окно. Управление передается обратно. И delete освобождает память.
Проблема не в этом. У меня выводится ошибка из-за не правильной связи этих двух окон.

Сообщение отредактировал breeve - 30.12.2009, 13:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 30.12.2009, 14:12
Сообщение #6


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Попробуй сделай make clean, затем опять qmake, make.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 30.12.2009, 15:44
Сообщение #7


Участник
**

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

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




Репутация:   1  


Цитата(igor_bogomolov @ 30.12.2009, 14:12) *
Попробуй сделай make clean, затем опять qmake, make.

та же ошибка
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.12.2009, 16:16
Сообщение #8


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

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

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




Репутация:   94  


Цитата(breeve @ 30.12.2009, 16:33) *
Появляется окно
а где в коде видно, что оно появляется, оно тут же убивается (delete) и жизнь остального кода течёт своим чередом.

Цитата(breeve @ 30.12.2009, 16:10) *
второй окно(диалоговой) должно быть дочерним от виджета
это нужно только для центровки дочернего окна относительно родителя
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 30.12.2009, 16:18
Сообщение #9


Участник
**

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

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




Репутация:   1  


Цитата(Litkevich Yuriy @ 30.12.2009, 16:16) *
а где в коде видно, что оно появляется, оно тут же убивается (delete) и жизнь остального кода течёт своим чередом.

может быть оно сразу и удаляется.. но проект то должен компилиться?

Сообщение отредактировал breeve - 30.12.2009, 16:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.12.2009, 16:18
Сообщение #10


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

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

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




Репутация:   94  


Цитата(breeve @ 30.12.2009, 16:10) *
То окно которое появляется оно пустое..
Мне компилятор выводит
вот это я не пойму, если есть ошибка компиляции, то программу нельзя запустить. Если окно появляется, значит ошибки компиляции нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 3.1.2025, 4:44