 |
вопрос по qt |
 |
20.08.2003, 12:45
|
#1
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
вопрос по qt
поделитесь опытом в следующей ситуации: создаю несколько радио-кнопок в группе кнопок (QButtonGroup). согласно примерам самой библиотеки, никаких размеров задавать не нужно, группа сама подстроиться под суммарный размер. в моем случае этого почему-то не происходит, и часть кнопок остается за бортом... вот примерный код:
PHP Code:
QButtonGroup group(3, Qt::Horizontal, &parent);
group.setFrameStyle(0);
group.setRadioButtonExclusive(true);
group.setInsideMargin(0);
insert(new QRadioButton("aaaaaaaaa", &group));
insert(new QRadioButton("bbbbbbbbb", &group));
insert(new QRadioButton("cccccccccccc", &group));
|
|
|
20.08.2003, 13:41
|
#2
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
вопрос снимается. размер все-таки надо задавать явно, я как-то пропустил это, устал видимо...
|
|
|
20.08.2003, 13:45
|
#3
|
ppz kkz
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
|
vo pervix ya ne ponyal otkuda u tebya vzyalsya eta funkciya `
group.setInsideMargin(0);
u menya v QT library takoy net
vo vtorix , dumayu shto tam vabshe ne nujna funkciya
insert( ... )
prosto kod doljen viglyadit tak `
(void)new QRadioButton("aaaaaaaaa", &group);
(void)new QRadioButton("bbbbbbbbb", &group);
(void)new QRadioButton("cccccccccccc", &group);
a parent doljen bit` kakim to Layout -om.
|
|
|
20.08.2003, 14:53
|
#4
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally posted by Davit
vo pervix ya ne ponyal otkuda u tebya vzyalsya eta funkciya `
group.setInsideMargin(0);
u menya v QT library takoy net
|
наверное версия старая...
но вопрос все равно уже закрыт
|
|
|
20.08.2003, 15:13
|
#5
|
ppz kkz
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
|
наверное версия старая...
Qt/Windows Non-commercial (version 2.3 )
da vrodi net .... a u tebya kakaya ?
|
|
|
20.08.2003, 15:24
|
#6
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally posted by Davit
наверное версия старая...
Qt/Windows Non-commercial (version 2.3 )
da vrodi net .... a u tebya kakaya ?
|
3.1.2  evaluation
|
|
|
20.08.2003, 16:16
|
#7
|
ppz kkz
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
|
za 30 dney ?
|
|
|
21.08.2003, 05:04
|
#8
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
да
|
|
|
 |
другой вопрос: |
 |
21.08.2003, 14:37
|
#9
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
другой вопрос:
размеры радиокнопок меняются без моего контроля: вначале, при создании, их высота равна 31, а в polish() - уже 18 (и на экране они появляются именно с такой высотой). кроме того, некоторые оказываются гораздо длинне своего текста - как будто группа их выровняла до длины самого длинного элемента. действительно ли это так и как от этого избавиться?
Last edited by Aram Hambardzumyan; 21.08.2003 at 14:49.
|
|
|
22.08.2003, 15:30
|
#10
|
ppz kkz
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
|
izvini no ya ne mogu shto libo skazat i chem libo pomoch , poka ne uviju kod ...
|
|
|
 |
|
 |
25.08.2003, 05:39
|
#11
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
код приведен ниже.
фактически получается, что библиотека присваивает корректные размеры где-то между созданием и появлением на экране (наверное чтобы учесть стили графической среды на последний момент). и если это так, то я действительно могу узнать точный размер только непосредственно перед показом на экране  это так или нет? но все равно ничего страшного не произошло бы, если бы и в момент создания мне был бы доступен "настоящий" размер
PHP Code:
QtChoiceField::QtChoiceField(QWidget& parent, const StringCollection& texts, LayoutStyle lStyle):
QButtonGroup(texts.size(), lStyle == VERTICAL ? Qt::Vertical : Qt::Horizontal, &parent)
{
assert(lStyle == VERTICAL || lStyle == HORIZONTAL);
setFrameStyle(0);
setRadioButtonExclusive(true);
setInsideMargin(0);
int totalWidth = 0;
for(StringCollection::const_iterator it = texts_.begin(); it != texts_.end(); ++it)
{
QRadioButton* item = new QRadioButton(it->c_str(), this);
item->setFocusPolicy(StrongFocus);
if(lStyle == VERTICAL)
{
totalWidth = max(totalWidth, item->width());
}
else
{
totalWidth += item->width() + 3;
}
}
QSize totalSize(0, 0);
int itemCount = count();
if(itemCount != 0)
{
int itemHeight = find(0)->height();
if(lStyle == VERTICAL)
{
totalSize.setWidth(totalWidth);
totalSize.setHeight((itemCount - 1) * 3 + itemCount * itemHeight);
}
else
{
if(totalWidth > 0)
{
totalWidth -= 3;
}
totalSize.setWidth(totalWidth);
totalSize.setHeight(itemHeight);
}
}
resize(totalSize);
bool ok = QObject::connect(this, SIGNAL(clicked(int)), this, SLOT(onSet()));
assert(ok);
}
void
QtChoiceField::polish()
{ // проверка размеров:
int i = find(0)->height();
i = find(0)->width();
i = find(1)->width();
i = find(2)->width();
}
Last edited by Aram Hambardzumyan; 25.08.2003 at 06:44.
|
|
|
 |
25.08.2003, 12:53
|
#12
|
ppz kkz
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
|
Я думаю, что тебе просто нужно поменять местами следующие фрагменты кода
if(lStyle == VERTICAL)
{
1. totalWidth = max(totalWidth, item->width());
}
else
{
2. totalWidth += item->width() + 3;
}
1. -> 2.
2. -> 1.
Vertical - ето когда элементы упорядочены последовательно горизонтально
1.[---] 2. [---] 3. [---] 4. [---]
Horizontal - ето когда элементы упорядочены последовательно вертикально
1. [---]
2. [---]
3. [---]
4. [---]
|
|
|
25.08.2003, 13:02
|
#13
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
да нет, все правильно, так и должно быть. укажу более точно, на что надо обратить внимание: когда я считываю размеры (оба - и высоту, и ширину) каждого элемента (кнопки) в конструкторе, они оказываются не теми, какими потом появляются на экране. кроме того, в конце конструктора, когда все элементы добавлены, вызов childrenRect() возвращает прямоугольник в неверным размером. а когда дело доходит до polish(), эти же размеры уже установлены правильно (т. е. ширина расиокнопок - ровно по тексту, ну и общая ширина childrenRect() соответственно). других моих финкций в этом классе нет.
|
|
|
25.08.2003, 17:49
|
#14
|
ppz kkz
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
|
vobshem ya ne ponyal pochemu je ty v konstruktore vyzyvaesh funkciyu resize s ne vernymi parametrami ...
|
|
|
26.08.2003, 04:41
|
#15
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally posted by Davit
vobshem ya ne ponyal pochemu je ty v konstruktore vyzyvaesh funkciyu resize s ne vernymi parametrami ...
|
потому что верных размеров получить не могу, а нужно именно задолго до того, как объект появиться на экране, например, в конструкторе
|
|
|
All times are GMT. The time now is 17:45. |
|
|