Здравствуйте, гость ( Вход | Регистрация )
eriser | Дата 7.1.2011, 14:37 |
Спасибо -помогло! Унаследовался от QWidget (а так-же QFrame) и всё заработало! Дальше предстоит установить слоты на эти боксы, думаю разберусь. |
|
Litkevich Yuriy | Дата 7.1.2011, 13:24 |
Вот в этом коде: во-вторых, QFrame *lab =new QFrame; лишний, т.к. QLabel уже наследник QFrame и, соответственно, обладает всеми его свойствами.в-третьих, lab->setLayout (lay); устанавливает компоновщик для рамки, однако у рамки нет родителя, поэтому она - виджет верхнего уровня (окно), ну а до вызова show() она просто не показывается. Ну и, во-первых, если ты установишь (как и полагается) компоновщик для самого ButtonOnLabel, а не для рамки то, что метка должна будет сделать со своим текстом? Где относительно текста должны будут появится виджеты? Вообще ни к чему было наследоватся от метки. Надо было идти простым путём - наследоваться от QWidget или QFrame (только если рамка нужна). Обычное правило при выборе базового класса - выбрать наименьшую необходимую функциональность. Сложные виджеты в качестве базового класса выбирают, когда хотят изменить их функциональность, например, нужен фоновый рисунок у метки. А у тебя полностью новый, сложный (состоящий из нескольких) виджет. ButtonOnLabel::setText ("'это я вижу"); это возможно будет работать, но написано не корректно. Так вызывают метод базового класса внутри наследника, а базовый класс - QLabel. Поэтому запись должна выглядеть так:
|
|
eriser | Дата 7.1.2011, 11:03 |
Спасибо, что помогаете! Пробовал, не выходит ничего. Дело в том что ButtonOnLabel::setText ("'это я вижу"); создаются, а кнопок нет? | |
Litkevich Yuriy | Дата 7.1.2011, 0:17 |
Т.к. функциональность Но если в конструкторе добавляю show, тогда то что я задумал появляется, но в новом окне. метод этот нужно вызывать после создания объекта, когда родитель (у тебя Widget) уже создан:
|
|
eriser | Дата 7.1.2011, 0:02 |
При каждом нажатии на кнопку из файла считывается строка или несколько строк. Динамически создаётся массив из экземпляров моего класса (1 по 6 или 12 штук) и располагается на форме в каком-то порядке. Каждый экземпляр содержит label(сюда передаётся считанная строка) и 2 кнопки Да и Нет. Каждый этот объект со своим идентификатором, а кнопками фиксируется ответ пользователя в таблице статистики. Пытался создать класс на основе label. В конструкторе класса 1.создаю две кнопки 2. одну метку 3. layout 4. кнопки и метку добавляю в layout 5. на фрейм устанавливаю layout На форме программы ничего не появляется. Но если в конструкторе добавляю show, тогда то что я задумал появляется, но в новом окне. virtbox.h
virtbox.cpp
widget.cpp
судя по тому, что не получается что-то не так... |
|
Litkevich Yuriy | Дата 6.1.2011, 19:53 |
eriser, ничего не понял из твоего описания. То-есть допустим при каждом нажатии на кнопку в griglayout добавляется рамка, в ней две кнопки и метка со своими параметрами. один раз нажали, что получилось? Второй раз нажали, что получилось? По какому принципу в griglayout помещаются новые объекты, построчно?Нарисуй эскиз. одной кнопкой всё получается, а как собрать всё это в конструкторе не могу понять. приведи код с одной кнопкой. О каком конструкторе речь, о конструкторе класса? |
|
eriser | Дата 6.1.2011, 15:13 |
Мне нужно динамически создать группу объектов (2 кнопки и метка на каком нибудь лейауте (не важно)). То-есть допустим при каждом нажатии на кнопку в griglayout добавляется рамка, в ней две кнопки и метка со своими параметрами. С одной кнопкой всё получается, а как собрать всё это в конструкторе не могу понять. В Делфи с этим проблем не было, а с Qt и c++ в целом - только начинаю изучать. В принципе всё похоже, но в этом пе получается провести аналогию. Заранее спасибо! |
|
FenixTES | Дата 18.11.2009, 16:52 |
QSignalMapper угу, сигналы да |
|
niXman | Дата 17.11.2009, 22:01 |
QSignalMapper | |
Litkevich Yuriy | Дата 17.11.2009, 13:00 |
FenixTES, также смотри пример Калькулятор: %QTDIR%\examples\widgets\calculator\calculator.cpp |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 19.4.2024, 14:53 |