crossplatform.ru

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

FenixTES
  опции профиля:
сообщение 17.11.2009, 10:31
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 14.11.2009
Пользователь №: 1230

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




Репутация:   0  


предположим, у меня есть число, мне нужно создать несколько кнопок(кол-во кнопок == числу), и потом повесить на них сигналы.
долго с этим долбался, что только не пробывал, создавал и массивы кнопок, и пробывал через QMap...
ниче только не получилось...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 7.1.2011, 13:24
Сообщение #2


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

Группа: Сомодератор
Сообщений: 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 ("'это я вижу");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 13.6.2025, 14:56