PDA

View Full Version : Why QGridLayout works wrong??



bangqianchen
27th April 2009, 13:29
I use QGridLayout to layout my widgets, I want to layout the widgets in 5 rows and 6 columns
only the button of "%" and "_" take one column, the "获取属性值" button take 4 columns, all other widgets may take 2 columns, the fellowing is my code, howerer,It sames that the button "%" and "_" have take 2 columns. How to solve this probem? thank you!


QGridLayout* CDlgAttributesQuery::createOperationBtns()
{
QPushButton* pBtn;
QGridLayout* pG = new QGridLayout;

pBtn = new QPushButton("=");
m_pBtnGroup->addButton(pBtn,btn_Operation_Equal_To);
pG->addWidget(pBtn,0,0,1,2);
pBtn = new QPushButton("<>");
m_pBtnGroup->addButton(pBtn,btn_Operation_Not_Equal);
pG->addWidget(pBtn,0,2,1,2);
pBtn = new QPushButton("Like");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Like);
pG->addWidget(pBtn,0,4,1,2);

pBtn = new QPushButton(">");
m_pBtnGroup->addButton(pBtn,btn_Operation_Greater_Than);
pG->addWidget(pBtn,1,0,1,2);
pBtn = new QPushButton(">=");
m_pBtnGroup->addButton(pBtn,btn_Operation_Greater_Equal);
pG->addWidget(pBtn,1,2,1,2);
pBtn = new QPushButton("And");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_And);
pG->addWidget(pBtn,1,4,1,2);

pBtn = new QPushButton("<");
m_pBtnGroup->addButton(pBtn,btn_Operation_Smaller_Than);
pG->addWidget(pBtn,2,0,1,2);
pBtn = new QPushButton("<=");
m_pBtnGroup->addButton(pBtn,btn_Operation_Smaller_Equal);
pG->addWidget(pBtn,2,2,1,2);
pBtn = new QPushButton("Or");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Or);
pG->addWidget(pBtn,2,4,1,2);

pBtn = new QPushButton("%");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Percent);
pG->addWidget(pBtn,3,0,1,1);
pBtn = new QPushButton("_");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Underline);
pG->addWidget(pBtn,3,1,1,1);
pBtn = new QPushButton("()");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Brackets);
pG->addWidget(pBtn,3,2,1,2);
pBtn = new QPushButton("Not");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Not);
pG->addWidget(pBtn,3,4,1,2);

pBtn = new QPushButton("Is");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Is);
pG->addWidget(pBtn,4,0,1,2);
pBtn = new QPushButton("获取属性值");
m_pBtnGroup->addButton(pBtn,btn_Obtain_Fields_Values);
pG->addWidget(pBtn,4,2,1,4);

return pG;
}

Lykurg
27th April 2009, 14:22
There is a difference between [ QTCLASS ]:
QGridLayout* CDlgAttributesQuery::createOperationBtns()
{
QPushButton* pBtn;
QGridLayout* pG = new QGridLayout;

and [ CODE ]:

QGridLayout* CDlgAttributesQuery::createOperationBtns()
{
QPushButton* pBtn;
QGridLayout* pG = new QGridLayout;
See the difference?

And then, your picture is quite right. what you probably mean is, that the buttons "_" and "%" should only be half wide as the others but that is achieved with the size policy and not through the layout alone. QPushButton::setSizePolicy()

bangqianchen
27th April 2009, 14:40
I have made a mistake, I should use
for the C++ codes, It's looks better!



QGridLayout* CDlgAttributesQuery::createOperationBtns()
{
QPushButton* pBtn;
QGridLayout* pG = new QGridLayout;

pBtn = new QPushButton("=");
m_pBtnGroup->addButton(pBtn,btn_Operation_Equal_To);
pG->addWidget(pBtn,0,0,1,2);
pBtn = new QPushButton("<>");
m_pBtnGroup->addButton(pBtn,btn_Operation_Not_Equal);
pG->addWidget(pBtn,0,2,1,2);
pBtn = new QPushButton("Like");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Like);
pG->addWidget(pBtn,0,4,1,2);

pBtn = new QPushButton(">");
m_pBtnGroup->addButton(pBtn,btn_Operation_Greater_Than);
pG->addWidget(pBtn,1,0,1,2);
pBtn = new QPushButton(">=");
m_pBtnGroup->addButton(pBtn,btn_Operation_Greater_Equal);
pG->addWidget(pBtn,1,2,1,2);
pBtn = new QPushButton("And");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_And);
pG->addWidget(pBtn,1,4,1,2);

pBtn = new QPushButton("<");
m_pBtnGroup->addButton(pBtn,btn_Operation_Smaller_Than);
pG->addWidget(pBtn,2,0,1,2);
pBtn = new QPushButton("<=");
m_pBtnGroup->addButton(pBtn,btn_Operation_Smaller_Equal);
pG->addWidget(pBtn,2,2,1,2);
pBtn = new QPushButton("Or");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Or);
pG->addWidget(pBtn,2,4,1,2);

pBtn = new QPushButton("%");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Percent);
pG->addWidget(pBtn,3,0,1,1);
pBtn = new QPushButton("_");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Underline);
pG->addWidget(pBtn,3,1,1,1);
pBtn = new QPushButton("()");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Brackets);
pG->addWidget(pBtn,3,2,1,2);
pBtn = new QPushButton("Not");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Not);
pG->addWidget(pBtn,3,4,1,2);

pBtn = new QPushButton("Is");
m_pBtnGroup->addButton(pBtn,btn_Operation_Key_Is);
pG->addWidget(pBtn,4,0,1,2);
pBtn = new QPushButton("获取属性值");
m_pBtnGroup->addButton(pBtn,btn_Obtain_Fields_Values);
pG->addWidget(pBtn,4,2,1,4);

return pG;
}

bangqianchen
27th April 2009, 14:59
hello, Lykurg, I want to know how to call QPushButton::setSizePolcy
The fellowing code do not work.


pBtn = new QPushButton("%");
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Percent);
pBtn->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixe d);
pG->addWidget(pBtn,3,0,1,1);
pBtn = new QPushButton("_");
pBtn->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Fi xed);
m_pBtnGroup->addButton(pBtn,btn_Operation_Char_Underline);
pG->addWidget(pBtn,3,1,1,1);

Lykurg
27th April 2009, 17:11
Hi, I just recognized that in your specific case QGridLayout::setColumnStretch() do the work.

Edit: A good thing to figure out such problem can be to play around in Qt Designer even if you later want to code the layout yourself.

bangqianchen
28th April 2009, 09:34
Thank you for your suggestion, I have solve my problem!

wysota
28th April 2009, 20:02
Please read what you post before posting it. That's what the "preview" button is for. Then correct your post to save people the pain of reading a post that is hardly readable. And even after submitting a post you have some time to edit it. Please be nice to people willing to help you.