我正在尝试做一些我认为它会非常容易:添加QRadioButton到我的QWizardPage没有任何布局。
下面添加QRadioButton的代码在用户点击Next按钮时被调用(信号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) rect1的正确值应为(50,20,260,40),rect2的正确值应为n (50,60,260, 40)
那么,问题是什么,如何添加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,请问
这里有一些值得研究的QWizard
例子…
http://qt project.org/doc/qt - 4.8 -/-对话框- trivialwizard.html
http://qt project.org/doc/qt - 4.8 -/-对话框- classwizard.html
http://qt project.org/doc/qt - 4.8 -/-对话框- licensewizard.html
一般来说……
使用布局,让你的生活更轻松。这是一个学习曲线,代码一开始看起来很有趣,但从长远来看,您会感激您所做的。如果可能的话,我避免使用Qt Designer,我使用布局和嵌套布局来定位所有内容。添加拉伸和间隔以及任何你需要的东西。太棒了。然后,如果你需要显示或隐藏的东西,你嵌套在QWidget
,你显示和隐藏的小部件,以调整当它是可见的。
http://qt project.org/doc/qt - 4.8 -/- layout.html
http://qt project.org/doc/qt - 4.8 -/-教程- widget windowlayout.html
这可能是当一个QRadioButton
添加没有布局,它没有更新你的小部件。
如果你改变了你的小部件,你需要发布一个update()
事件来反映它。
另外,当你不使用布局时,分层和定位可能会有点疯狂。请确保您没有在添加按钮的位置上方绘制其他内容。
这里还有一些要记住的事情。虽然看起来你可能已经在处理这些了…
另一个可能发生的问题是,如果你添加一个QRadioButton
不进入布局,忘记父级它,它可能不会被添加。布局也很好地处理了QObject
s的父级。
最后,您需要确保您的按钮在父小部件的范围内存在。如果你在一个槽中声明它,它有一个局部作用域,当你离开这个槽时,它就消失了。(你把它放在堆上,所以应该没问题)。
因此,将其作为子类QWizardPage
的成员变量,并将其设置为指针。Qt可以很好地处理对象的父级,如果它们正确地位于对象树上,则可以正确地删除。
http://qt project.org/doc/qt - 4.8 -/- objecttrees.html
当你使用QRadioButton
s时,一定要在你的布局中使用'QGroupBox'。这可以很好地处理排他属性。
http://doc-snapshot.qt-project.org/4.8/qradiobutton.html细节
希望对你有帮助。