crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 19.4.2024, 18:42