Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters

Reply
 
Thread Tools

вопрос по qt
Old 20.08.2003, 12:45   #1
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default вопрос по qt

поделитесь опытом в следующей ситуации: создаю несколько радио-кнопок в группе кнопок (QButtonGroup). согласно примерам самой библиотеки, никаких размеров задавать не нужно, группа сама подстроиться под суммарный размер. в моем случае этого почему-то не происходит, и часть кнопок остается за бортом... вот примерный код:
PHP Code:
QButtonGroup group(3Qt::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)); 

Old 20.08.2003, 13:41   #2
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

вопрос снимается. размер все-таки надо задавать явно, я как-то пропустил это, устал видимо...

Old 20.08.2003, 13:45   #3
ppz kkz
 
Davit's Avatar
 
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
Default

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.

Old 20.08.2003, 14:53   #4
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

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
наверное версия старая...

но вопрос все равно уже закрыт

Old 20.08.2003, 15:13   #5
ppz kkz
 
Davit's Avatar
 
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
Default

наверное версия старая...
Qt/Windows Non-commercial (version 2.3 )

da vrodi net .... a u tebya kakaya ?

Old 20.08.2003, 15:24   #6
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally posted by Davit
наверное версия старая...
Qt/Windows Non-commercial (version 2.3 )

da vrodi net .... a u tebya kakaya ?
3.1.2 evaluation

Old 20.08.2003, 16:16   #7
ppz kkz
 
Davit's Avatar
 
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
Default

za 30 dney ?

Old 21.08.2003, 05:04   #8
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

да

другой вопрос:
Old 21.08.2003, 14:37   #9
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Arrow другой вопрос:

размеры радиокнопок меняются без моего контроля: вначале, при создании, их высота равна 31, а в polish() - уже 18 (и на экране они появляются именно с такой высотой). кроме того, некоторые оказываются гораздо длинне своего текста - как будто группа их выровняла до длины самого длинного элемента. действительно ли это так и как от этого избавиться?

Last edited by Aram Hambardzumyan; 21.08.2003 at 14:49.

Old 22.08.2003, 15:30   #10
ppz kkz
 
Davit's Avatar
 
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
Default

izvini no ya ne mogu shto libo skazat i chem libo pomoch , poka ne uviju kod ...

Old 25.08.2003, 05:39   #11
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

код приведен ниже.

фактически получается, что библиотека присваивает корректные размеры где-то между созданием и появлением на экране (наверное чтобы учесть стили графической среды на последний момент). и если это так, то я действительно могу узнать точный размер только непосредственно перед показом на экране это так или нет? но все равно ничего страшного не произошло бы, если бы и в момент создания мне был бы доступен "настоящий" размер

PHP Code:
QtChoiceField::QtChoiceField(QWidgetparent, const StringCollectiontextsLayoutStyle 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
   { 
      
QRadioButtonitem = new QRadioButton(it->c_str(), this); 
      
item->setFocusPolicy(StrongFocus); 

      if(
lStyle == VERTICAL
      { 
         
totalWidth max(totalWidthitem->width()); 
      } 
      else 
      { 
         
totalWidth += item->width() + 3
      } 
   } 

   
QSize totalSize(00); 

   
int itemCount count(); 
   if(
itemCount != 0
   { 
      
int itemHeight find(0)->height(); 
      if(
lStyle == VERTICAL
      { 
         
totalSize.setWidth(totalWidth); 
         
totalSize.setHeight((itemCount 1) * itemCount itemHeight); 
      } 
      else 
      { 
         if(
totalWidth 0
         { 
            
totalWidth -= 3
         } 
         
totalSize.setWidth(totalWidth); 
         
totalSize.setHeight(itemHeight); 
      } 
   } 

   
resize(totalSize); 

   
bool ok QObject::connect(thisSIGNAL(clicked(int)), thisSLOT(onSet())); 
   
assert(ok); 


void 
QtChoiceField
::polish() 
// проверка размеров: 
   
int i find(0)->height(); 
   
find(0)->width(); 
   
find(1)->width(); 
   
find(2)->width(); 


Last edited by Aram Hambardzumyan; 25.08.2003 at 06:44.

Old 25.08.2003, 12:53   #12
ppz kkz
 
Davit's Avatar
 
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
Default

Я думаю, что тебе просто нужно поменять местами следующие фрагменты кода

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. [---]

Old 25.08.2003, 13:02   #13
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

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

Old 25.08.2003, 17:49   #14
ppz kkz
 
Davit's Avatar
 
Join Date: 03 2003
Location: at home
Age: 41
Posts: 111
Rep Power: 5
Default

vobshem ya ne ponyal pochemu je ty v konstruktore vyzyvaesh funkciyu resize s ne vernymi parametrami ...

Old 26.08.2003, 04:41   #15
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally posted by Davit
vobshem ya ne ponyal pochemu je ty v konstruktore vyzyvaesh funkciyu resize s ne vernymi parametrami ...
потому что верных размеров получить не могу, а нужно именно задолго до того, как объект появиться на экране, например, в конструкторе
Reply




Реклама:
реклама
Buy text link .

All times are GMT. The time now is 17:45.
Top

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.