crossplatform.ru

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


  Ответ в Работа с окнами
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 10 сообщений [ в обратном порядке ]
bigory Дата 24.10.2010, 13:20
  Понял, спасибо!
Думаю, вопрос по открытию и закрытию диалогового окна отпал.
Litkevich Yuriy Дата 24.10.2010, 13:10
 
Цитата(bigory @ 24.10.2010, 16:06) *
То что dialog.setWordCount(document().wordCount()); так и не понял для чего и что это такое
это некий метод класса WordCountDialog, из примера
bigory Дата 24.10.2010, 13:06
  Заработал вот так:

void MainWindow::IP()
{
    Dialog dialog(this);
    dialog.exec();
}


То что dialog.setWordCount(document().wordCount()); так и не понял для чего и что это такое
bigory Дата 24.10.2010, 12:25
  Вот так?
void MainWindow::IP()
{
    Dialog* a=new Dialog();
    a->show();
    a->setAttribute(Qt::WA_DeleteOnClose);
}
Litkevich Yuriy Дата 24.10.2010, 12:14
 

Цитата(bigory @ 23.10.2010, 2:00) *
Не понял что значит создать объект на куче
когда объект создаётся с помощью оператора new, то он создаётся в "куче".
Когда объект создаётся обычным образом:
int myVar;
то он создаётся на стеке

Цитата(bigory @ 24.10.2010, 14:30) *
А можно ли все таки простой пример как удалить виджет при его закрытии?
поставить виджету флаг Qt::WA_DeleteOnClose

Но в твоём примере, с диалоговым окном, лучше всего диалог создавать на стеке (пример из асистента):
 void EditorWindow::countWords()
 {
     WordCountDialog dialog(this);
     dialog.setWordCount(document().wordCount());
     dialog.exec();
 }
при выходе из функции (области видимости) объект dialog будет уничтожен автоматически и немедленно.
метод exec() создаёт цикл обработки событий и не даёт программе исполнятся дальше. Т.е. диалоговое окно будет модальным (не пустит в родителя). При закрытии диалога, метод exec() завершится и выполнение программы продолжится.
bigory Дата 24.10.2010, 11:30
  А можно ли все таки простой пример как удалить виджет при его закрытии? Так вроде надежнее
Litkevich Yuriy Дата 24.10.2010, 10:36
 
Цитата(bigory @ 24.10.2010, 3:57) *
мне позволит автоматически удалить при закрытии окна?
в случае с Qt, да. Т.к. в конструктор виджета передаётся указатель (this) на родительский виджет. Тогда родительский виджет при разрушении удалит и дочерний виджет.
bigory Дата 24.10.2010, 0:57
  Копался по инету в поиске как автоматически освобождать память и где-то встретилось такой вариант:
void MainWindow::IP()
{
Dialog* a=new Dialog(this);
a->show();
}


Вот хочу уточнить, Dialog* a=new Dialog(this); мне позволит автоматически удалить при закрытии окна?

Вот на это я наткнулся
Цитата
QPushButton *btn = new QPushButton(this) // обьект сам удалиться
Sokoloff Дата 22.10.2010, 23:27
 
Цитата(bigory @ 23.10.2010, 0:00) *
Не понял что значит создать объект на куче
Я попробовал сделать вот так:
Раскрывающийся текст

void MainWindow::IP()
{
Dialog* a=new Dialog();
a->show();
}

Вот вопрос, не будет сильно влиять на память? Какой подход будет более правильным?


Вот именно так будет утечка памяти. Делая new ты выделяешь память, и тут же теряешь указатель на нее, поэтому освободить уже никак не сможешь. Либо объявляй переменную в классе, отлавливай закрытие диалога и освобождай память. Или смотри в сторону флага Qt::WA_DeleteOnClose, тогда диалог сам удалится из памяти после закрытия. Скорее тебе подойдет второе.
bigory Дата 22.10.2010, 23:00
  Не понял что значит создать объект на куче
Я попробовал сделать вот так:
Раскрывающийся текст

void MainWindow::IP()
{
Dialog* a=new Dialog();
a->show();
}

Вот вопрос, не будет сильно влиять на память? Какой подход будет более правильным?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 8:59