Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Wachburn от Март 24, 2010, 13:39



Название: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: Wachburn от Март 24, 2010, 13:39
т.е. чтоб у каждого виджета была своя пиктограмма... ато эта пиктограмма почемуто приобретает вид главного окна приложения


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: voronElf от Март 25, 2010, 09:31
каждому виджету вызвать setWindowIcon ( const QIcon & icon ). По умолчанию берется от родителя


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: villager от Март 25, 2010, 11:12
есть нюансы
устанавливать надо у QMdiSubWindow, примерно так
Код:
mdiarea=QMdiArea()
d=QDialog()
mdiarea.addSubWindow(d)
d.parent().setWindowIcon(QIcon("...."))


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: voronElf от Март 25, 2010, 11:37
ну да, хорошее уточнение, это часто ускользает из внимания.


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: Wachburn от Март 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 (либо того диалога, который был запущен последним). Как сделать чтоб они (пиктограммы) на всех окнах были разными?


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: voronElf от Март 25, 2010, 12:45
странно, наверное както не так делаешь,
у каждого твоего диалога свой QMdiSubwindow, вот ему то и надо иконки назначать. Каждому QMdiSubwindow ставишь свою иконку, не будут пересекаться.

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


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: Wachburn от Март 25, 2010, 13:20
Код:
QMdiSubWndow * subWnd = mdiarea.addSubWindow(dlg);
subWnd->setWindowIcon(QIcon("...."));

ооооо.... вот это самое оно... спасибо


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: voronElf от Март 25, 2010, 13:33
о как  :o

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

диалогу родителем mdiArea назначается чтоли, а не субокно ?


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: voronElf от Март 25, 2010, 13:42
да вроде нет
тестик заваял, в паренте адрес QMdiSubWindow лежит, все нормально ))


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: Wachburn от Март 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()... хотя не могу понять почему


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: BRE от Март 25, 2010, 16:57
т.е. у родителя billForm нет функции setWindowIcon()... хотя не могу понять почему
Потому, что parent() это:
QObject * QObject::parent () const

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

Привидение типа все исправит, см: qobject_cast<T>( ... )


Название: Re: Как установить пиктограмму дочернего виджета MDI программы?
Отправлено: Kolobok от Март 25, 2010, 17:48
Или воспользоваться этим
Код:
QWidget * QWidget::parentWidget ()