将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
希望有所帮助。
更新不起作用,但将QRadioButton添加到布局工作。还+1你真的很好,有据可查的答案。谢谢。 – peterphonic