| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT4] QFrame установка backgroundColor |
| Автор: Mal Hack 7.8.2007, 22:16 | ||
| Как на QFrame установить фоновый цвет? Копать в такую сторону:
или есть по проще? |
| Автор: nickless 8.8.2007, 22:17 | ||
| Если цвет не стандартный, то надо изменять нужный цвет в palette. Только устанавливается она методом setPalette(QPalette&), a setBackgroundRole принимает QPalette::ColorRole, это например если нужно сделать окна стандартным цветом текста итд. setPalette скопирует себе палетту, так что динамически выделять память тут вообще ненадо. И в любом случае не нужно вызывать деструктор напрямую, для этого есть delete. Вот например как это (ну немного больше чем только цвет) делает Qt Designer:
|
| Автор: nickless 10.8.2007, 19:33 | ||||||
Если работает как надо, значит не нужны, тот код сгенерирован Qt Designer-ом, он там кроме цвета еще чего-то делает. delete автоматически вызывает деструктор, а потом освобождает память выделенную для самого класса, если вызвать деструктор напрямую, он освободит память возможно выделенную в конструкторе итд. НО память выделенную под сам класс он не освободит. Вот пример:
С delete всё освобождается:
А только с вызовом деструктора утекают 4 байта, т.е. sizeof(A):
Кстати объекты Qt обычно сами удаляют друг друга, например если создать QBoxLayout и присвоить его чему-нибудь, удалять этот класс не надо, тут надо смотреть в документации. |
| Автор: Mal Hack 10.8.2007, 21:48 | ||
Для использования delete обязательно объявлять переменую как указатель, или можно, как объект?
Если честно, не совсем понял о чем ты. Ты имеешь ввиду, что Qt сам удаляет "потомков"? |
| Автор: nickless 10.8.2007, 22:41 |
| Всё что было создано new надо удалять с помощью delete, а если переменная - объект, её делитом удалять не надо (да и не получится), она сама уничтожится когда закончится скоп (scope т.е. функция, блок итд). Не потомков а скорей детей, т.е. допустим есть QFrame, а на ней куча всяких контролов. При создании любого контрола, ему передаётся указатель на родителя "parent", этот родитель убивает всех детей при удалении. Некоторые функции перенимают владение объектами, которых ей передают, а некоторые нет, это надо смотреть в документации. |
| Автор: Mal Hack 10.8.2007, 22:49 | ||||
Ясно, значит в моем случае delete не нужен, т.к. указателей я не использую.
Ну я это и имел ввиду, выразился только, конечно, не корректно. Спасибо. |