Russian Qt Forum

Qt => Вопросы новичков => Тема начата: LIKAN_BLK от Май 02, 2012, 15:12



Название: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 15:12
В QT разбираюсь второй день, так что ни чем в меня не кидать.
Есть два виджета (class Dialog : public QDialog{}; .....Dialog w; - В качестве основного окна),  и собственный виджет отнаследованный от QWidget. Как сделать так чтобы второй виджет отрисовывался в окне первого?


Название: Re: Как подружить два виджета.
Отправлено: kambala от Май 02, 2012, 16:20
назначить второму виджету родителя типа Dialog


Название: Re: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 16:54
Пример можно?


Название: Re: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 17:04
Если вы имели ввиду что-то вроде
 MyWidget(QDialog * parent = 0): QDialog(parent) {p=new QPainter; }
То пишет ошибку
MyWidget.h:13: ошибка: type «QDialog» is not a direct base of «MyWidget»


Название: Re: Как подружить два виджета.
Отправлено: kambala от Май 02, 2012, 17:52
книжки читать нужно, а не тыкаться наугад.
Код
C++ (Qt)
Dialog *d = new Dialog;
MyWidget *w = new MyWidget(d);


Название: Re: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 18:05
Эмм, пробовал уже, не пашет, не появляется мой виджет.
Кстати метод show() нужно вызывать для обоих виджетов или только для родителя?
Если вызываю для обоих-то вижу два разных окна, если только для родителя, не вижу второго виджета вообще.


Название: Re: Как подружить два виджета.
Отправлено: Serr500 от Май 02, 2012, 19:54
Код:
Dialog D;
MyWidget My;
My.setParent(&D);
D.show();

Если вы имели ввиду что-то вроде
 MyWidget(QDialog * parent = 0): QDialog(parent) {p=new QPainter; }
То пишет ошибку
MyWidget.h:13: ошибка: type «QDialog» is not a direct base of «MyWidget»
А так может писать только тот, кто ещё и в C++ не разбирается.


Название: Re: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 20:43
Нет, никаких признаков MyWidget My;


Название: Re: Как подружить два виджета.
Отправлено: Serr500 от Май 02, 2012, 20:48
Тогда ищите ошибки в коде виджета. Кстати, а ваш виджет вообще хоть что-то отрисовываемое имеет?


Название: Re: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 21:37
Вы боитесь что я его не разглядел?
Увы, второй виджет отдан на растерзание QPainter, там много чего заметного


Название: Re: Как подружить два виджета.
Отправлено: Serr500 от Май 02, 2012, 22:00
QWidget сам по себе не разглядишь, поэтому я и усомнился. Выложите компилируемый кусок проекта, посмотрим что там не так.


Название: Re: Как подружить два виджета.
Отправлено: LIKAN_BLK от Май 02, 2012, 22:21
 http://pastebin.com/hS2kaEkQ ( родительский виджет)  http://pastebin.com/0gFhg3wC(cpp-шник для него) http://pastebin.com/dzPRRUKN (Второй виджет, который я должен отрисовать на первом) http://pastebin.com/AU2J7SLs (Ну и собственно main)


Название: Re: Как подружить два виджета.
Отправлено: Serr500 от Май 03, 2012, 08:04
Ага! Всё понятно. Ваш собственный виджет унаследован не от QWidget, а от QDialog. Диалог - это всегда отдельное окно и потому оно не может быть внутри другого диалога. Нужно унаследоваться от QWidget и всё будет работать. Во вложении - работающий вариант.