Russian Qt Forum
Ноябрь 24, 2024, 16:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как установить пиктограмму дочернего виджета MDI программы?  (Прочитано 7063 раз)
Wachburn
Гость
« : Март 24, 2010, 13:39 »

т.е. чтоб у каждого виджета была своя пиктограмма... ато эта пиктограмма почемуто приобретает вид главного окна приложения
« Последнее редактирование: Март 24, 2010, 14:06 от Wachburn » Записан
voronElf
Гость
« Ответ #1 : Март 25, 2010, 09:31 »

каждому виджету вызвать setWindowIcon ( const QIcon & icon ). По умолчанию берется от родителя
Записан
villager
Гость
« Ответ #2 : Март 25, 2010, 11:12 »

есть нюансы
устанавливать надо у QMdiSubWindow, примерно так
Код:
mdiarea=QMdiArea()
d=QDialog()
mdiarea.addSubWindow(d)
d.parent().setWindowIcon(QIcon("...."))
Записан
voronElf
Гость
« Ответ #3 : Март 25, 2010, 11:37 »

ну да, хорошее уточнение, это часто ускользает из внимания.
Записан
Wachburn
Гость
« Ответ #4 : Март 25, 2010, 12:13 »

есть нюансы
устанавливать надо у QMdiSubWindow, примерно так
Код:
mdiarea=QMdiArea()
d=QDialog()
mdiarea.addSubWindow(d)
d.parent().setWindowIcon(QIcon("...."))
можно еще так написать mdiArea->setWindowIcon(QIcon(""));

спасибо, так работает но не совсем то, что нужно... у меня несколько (т.е. 4 штуки) окон QDialog, из этих 4 ех окон печатаются бланки разных видов. Мне нужно обозначит эти 4 окошка разными пиктограммами. Когда я делаю вышеприведенный код, то если у меня запущено 2 окошка, то их (всех открытых окон) пиктограммы принимает вид диалога d (либо того диалога, который был запущен последним). Как сделать чтоб они (пиктограммы) на всех окнах были разными?
Записан
voronElf
Гость
« Ответ #5 : Март 25, 2010, 12:45 »

странно, наверное както не так делаешь,
у каждого твоего диалога свой QMdiSubwindow, вот ему то и надо иконки назначать. Каждому QMdiSubwindow ставишь свою иконку, не будут пересекаться.

Код:
QMdiSubWndow * subWnd = mdiarea.addSubWindow(dlg);
subWnd->setWindowIcon(QIcon("...."));
Записан
Wachburn
Гость
« Ответ #6 : Март 25, 2010, 13:20 »

Код:
QMdiSubWndow * subWnd = mdiarea.addSubWindow(dlg);
subWnd->setWindowIcon(QIcon("...."));

ооооо.... вот это самое оно... спасибо
Записан
voronElf
Гость
« Ответ #7 : Март 25, 2010, 13:33 »

о как  Шокированный

а что, это разве не один в один сработает ? :
Код:
mdiarea.addSubWindow(dlg);
dlg->parent()->setWindowIcon(QIcon("...."));

диалогу родителем mdiArea назначается чтоли, а не субокно ?
Записан
voronElf
Гость
« Ответ #8 : Март 25, 2010, 13:42 »

да вроде нет
тестик заваял, в паренте адрес QMdiSubWindow лежит, все нормально ))
Записан
Wachburn
Гость
« Ответ #9 : Март 25, 2010, 16:52 »

да вроде нет
тестик заваял, в паренте адрес QMdiSubWindow лежит, все нормально ))

Вот моя функция отображения диалога... она реализована в главном окне приложения
Код:
void MainWindow::ShowBillForm()
{
    billForm = new BillForm(this);  // наследник от QDialog
    billForm->setAttribute(Qt::WA_DeleteOnClose);
    QMdiSubWindow * subBill = mdiArea->addSubWindow(billForm);
    subBill->setWindowIcon(QIcon("images/calendar.png"));
    billForm->show();

}
а вот так не работает
Код:
billForm->parent()->setWindowIcon(QIcon("...."));
т.е. у родителя billForm нет функции setWindowIcon()... хотя не могу понять почему
Записан
BRE
Гость
« Ответ #10 : Март 25, 2010, 16:57 »

т.е. у родителя billForm нет функции setWindowIcon()... хотя не могу понять почему
Потому, что parent() это:
QObject * QObject::parent () const

и возвращает он указатель на QObject, у которого действительно нет метода setWindowIcon.

Привидение типа все исправит, см: qobject_cast<T>( ... )
Записан
Kolobok
Гость
« Ответ #11 : Март 25, 2010, 17:48 »

Или воспользоваться этим
Код:
QWidget * QWidget::parentWidget ()
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.134 секунд. Запросов: 21.