将QRadioButton添加到没有布局的QWidget中

问题描述:

我正在尝试做一些我认为会非常简单的事情:在没有任何布局的情况下将QRadioButton添加到我的QWizardPage中。当用户点击按钮,接着将QRadioButton添加到没有布局的QWidget中

下面的代码,增加了QRadioButton被称为(信号currentIdChanged调用的代码):

int newPositionY = 0; 
for (vector<Events::VCS::PnPDevice>::const_iterator it=m_devices.begin(); it!=m_devices.end(); it++) 
{ 
    if (it->type == Events::VCS::HEADSET) 
    { 
     //add a radio button 
     stringstream text; 
     text << (it->name) << " " << (it->serialNumber); 
     QRadioButton* radioButton = new QRadioButton(ui.wpSINGLE_USER); 
     radioButton->setGeometry(50, 20 + newPositionY, 260, 40); 
     radioButton->setText(text.str().c_str()); 
     newPositionY = newPositionY + 40 
    } 
} 

}

我加入这个一小段代码,看看到底是怎么回事与我的QRadioButton

QList<QRadioButton*> listButton = ui.wpSINGLE_USER->findChildren<QRadioButton*>(); 
int size = listButton.size(); 
QRect rect1 = listButton[0]->rect(); 
QRect rect2 = listButton[1]->rect(); 

我然后意识到,似乎问题可能是QRect。

rect1和rect2的值是错误的。 rect1 =(0,0,259,39)和rect2 =(0,0,259,39)对于rect2(50,60,260,40),rect1的正确值应该是(50,20,260,40)和n,

那么,什么是问题,如何将QRadioButton添加到没有布局的QWidget?

编辑

也就是说奇怪,如果不是加入QRadioButton到QWizardPage当用户点击按钮旁边,我将它们添加到QWizard构造器,它的工作原理。

有人可以告诉我为什么我无法将QRadioButton添加到我的QWizardPage中插入到我的插槽功能中吗?

谢谢

QRect表现正常。您应该检查geometry(),而不是rect()

http://doc-snapshot.qt-project.org/4.8/qwidget.html#geometry-prop

http://doc-snapshot.qt-project.org/4.8/qwidget.html#rect-prop

http://doc-snapshot.qt-project.org/4.8/application-windows.html#window-geometry

下面是一些例子QWizard是值得研究...

http://qt-project.org/doc/qt-4.8/dialogs-trivialwizard.html

http://qt-project.org/doc/qt-4.8/dialogs-classwizard.html

http://qt-project.org/doc/qt-4.8/dialogs-licensewizard.html

一般来说...

使用的是布局,使您的生活更轻松。有一条学习曲线,起初代码看起来很有趣,但是长期来看,你会感激你的。如果可能的话,我避免使用Qt Designer,我使用布局和嵌套布局来定位所有内容。添加延伸和垫片以及其他任何你需要的东西。这很棒。然后,如果您稍后需要显示或隐藏某些内容,则可以将其嵌套在QWidget中,然后在可见时显示并隐藏该小部件以进行调整。

http://qt-project.org/doc/qt-4.8/layout.html

http://qt-project.org/doc/qt-4.8/tutorials-widgets-windowlayout.html

这可能是当没有布局添加了QRadioButton,它没有更新你的widget。

如果您更改了Widget中的内容,则需要发布update()事件才能反映出来。

http://doc-snapshot.qt-project.org/4.8/qwidget.html#update

此外,当你不使用的布局,分层和定位可以去有点疯狂。确保你没有在添加按钮的位置上绘制其他东西。

这里有一些事情要记住。虽然它看起来像你可能正在照顾一些已经...

另一个可能发生的问题是,如果你添加一个QRadioButton不到布局,并忘记父母它,它可能不会被添加在所有。亲子关系QObject也很好地通过布局来处理。

最后,您需要确保您的按钮存在您的父窗口小部件的范围。所以如果你在一个插槽中声明它,并且它有一个局部范围,那么当你离开插槽时,它就消失了。 (你把它放在堆上,所以它应该没问题)。

因此,使它成为您的子类QWizardPage的成员变量,并使其成为指针。 Qt可以很好地处理对象的父项,并且正确地删除正确的对象。

http://qt-project.org/doc/qt-4.8/objecttrees.html

此外,一定要看看你的布局采用“QGroupBox”当您使用QRadioButton秒。这很好地处理了排他属性。

http://doc-snapshot.qt-project.org/4.8/widgets-groupbox.html

http://doc-snapshot.qt-project.org/4.8/qradiobutton.html#details

希望有所帮助。

+0

更新不起作用,但将QRadioButton添加到布局工作。还+1你真的很好,有据可查的答案。谢谢。 – peterphonic