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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как подружить два виджета.  (Прочитано 5768 раз)
LIKAN_BLK
Гость
« : Май 02, 2012, 15:12 »

В QT разбираюсь второй день, так что ни чем в меня не кидать.
Есть два виджета (class Dialog : public QDialog{}; .....Dialog w; - В качестве основного окна),  и собственный виджет отнаследованный от QWidget. Как сделать так чтобы второй виджет отрисовывался в окне первого?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 02, 2012, 16:20 »

назначить второму виджету родителя типа Dialog
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
LIKAN_BLK
Гость
« Ответ #2 : Май 02, 2012, 16:54 »

Пример можно?
Записан
LIKAN_BLK
Гость
« Ответ #3 : Май 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»
« Последнее редактирование: Май 02, 2012, 17:10 от LIKAN_BLK » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Май 02, 2012, 17:52 »

книжки читать нужно, а не тыкаться наугад.
Код
C++ (Qt)
Dialog *d = new Dialog;
MyWidget *w = new MyWidget(d);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
LIKAN_BLK
Гость
« Ответ #5 : Май 02, 2012, 18:05 »

Эмм, пробовал уже, не пашет, не появляется мой виджет.
Кстати метод show() нужно вызывать для обоих виджетов или только для родителя?
Если вызываю для обоих-то вижу два разных окна, если только для родителя, не вижу второго виджета вообще.
Записан
Serr500
Гость
« Ответ #6 : Май 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++ не разбирается.
Записан
LIKAN_BLK
Гость
« Ответ #7 : Май 02, 2012, 20:43 »

Нет, никаких признаков MyWidget My;
Записан
Serr500
Гость
« Ответ #8 : Май 02, 2012, 20:48 »

Тогда ищите ошибки в коде виджета. Кстати, а ваш виджет вообще хоть что-то отрисовываемое имеет?
Записан
LIKAN_BLK
Гость
« Ответ #9 : Май 02, 2012, 21:37 »

Вы боитесь что я его не разглядел?
Увы, второй виджет отдан на растерзание QPainter, там много чего заметного
Записан
Serr500
Гость
« Ответ #10 : Май 02, 2012, 22:00 »

QWidget сам по себе не разглядишь, поэтому я и усомнился. Выложите компилируемый кусок проекта, посмотрим что там не так.
Записан
LIKAN_BLK
Гость
« Ответ #11 : Май 02, 2012, 22:21 »

 http://pastebin.com/hS2kaEkQ ( родительский виджет)  http://pastebin.com/0gFhg3wC(cpp-шник для него) http://pastebin.com/dzPRRUKN (Второй виджет, который я должен отрисовать на первом) http://pastebin.com/AU2J7SLs (Ну и собственно main)
Записан
Serr500
Гость
« Ответ #12 : Май 03, 2012, 08:04 »

Ага! Всё понятно. Ваш собственный виджет унаследован не от QWidget, а от QDialog. Диалог - это всегда отдельное окно и потому оно не может быть внутри другого диалога. Нужно унаследоваться от QWidget и всё будет работать. Во вложении - работающий вариант.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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