crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Динамически создавать объекты, и и как на них повесить сигналы?
Litkevich Yuriy
  опции профиля:
сообщение 7.1.2011, 13:24
Сообщение #11


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Вот в этом коде:
{
setGeometry (0,0,100,100);
    QFrame *lab =new QFrame;
    QPushButton *noBut = new QPushButton();
    QPushButton *yesBut =new QPushButton();
    QFormLayout *lay=new QFormLayout( );

yesBut->setText ("yes");
noBut->setText ("no");
lay->addWidget (lab);
lay->addWidget (yesBut);
lay->addWidget (noBut);

ButtonOnLabel::setText ("'это я вижу");
lab->setLayout (lay); // а тут ничего нет! Добавив lab->show(); создаются новые окна, а нужно размещать на одном gridlayoute

}
во-вторых, QFrame *lab =new QFrame; лишний, т.к. QLabel уже наследник QFrame и, соответственно, обладает всеми его свойствами.
в-третьих, lab->setLayout (lay); устанавливает компоновщик для рамки, однако у рамки нет родителя, поэтому она - виджет верхнего уровня (окно), ну а до вызова show() она просто не показывается.

Ну и, во-первых, если ты установишь (как и полагается) компоновщик для самого ButtonOnLabel, а не для рамки то, что метка должна будет сделать со своим текстом? Где относительно текста должны будут появится виджеты?

Вообще ни к чему было наследоватся от метки.
Надо было идти простым путём - наследоваться от QWidget или QFrame (только если рамка нужна).

Обычное правило при выборе базового класса - выбрать наименьшую необходимую функциональность.
Сложные виджеты в качестве базового класса выбирают, когда хотят изменить их функциональность, например, нужен фоновый рисунок у метки. А у тебя полностью новый, сложный (состоящий из нескольких) виджет.

Цитата(Litkevich Yuriy @ 7.1.2011, 15:21) *
ButtonOnLabel::setText ("'это я вижу");
это возможно будет работать, но написано не корректно. Так вызывают метод базового класса внутри наследника, а базовый класс - QLabel. Поэтому запись должна выглядеть так:
QLabel::setText ("'это я вижу");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eriser
  опции профиля:
сообщение 7.1.2011, 14:37
Сообщение #12


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.1.2011
Пользователь №: 2328

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо -помогло! :) Унаследовался от QWidget (а так-же QFrame) и всё заработало!
Дальше предстоит установить слоты на эти боксы, думаю разберусь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.1.2025, 19:40