首页 > 代码库 > QRadioButton分组且无边框的简单实现
QRadioButton分组且无边框的简单实现
最近在用QT+VS2008做一个项目,涉及到一个综合测评表,说白了有点像问卷调查——很多题目每题若干个选项。
初始时打算用下拉框,每个框中填入所有选项,但后来一琢磨这种方式不够直观与人性化,增添了一步用户下拉的操作。
于是决定换用单选按钮,在QT中叫做QRadioButton。啪啦啪啦一阵折腾,界面上前一半是题目,后一半全是一行一行的小圆孔,直接上图:
兴奋地马上编译、运行,一点瞬间懵了,整个界面上只有一个按钮同时有效。
当然,头脑冷静下来后就知道原因了:没有对这些按钮进行分组处理。
分组,首先凭直觉想到的就是利用QGroupBox,前面忘了解释,其实QT中控件类的名称与使用方法和MFC类似,只是接触久了发现前者更容易通过纯代码实现GUI应用程序的开发。
立即对每行的四个小不点配备一个QGroupBox,由于是水平排布,又借用了QHBoxLayout控件,可以通过其方法设置子控件的间距等属性。
又是啪啦啪啦一阵,编译、运行,发现每行都存在一个组框,显然不够美观,上网查呗。
高手如云,招式一个接一个,试了几种改变QGroupBox的属性,均以失败告终。
最终采纳了一种朴素又高大上的土方法:利用QWidget替代QGroupBox,即能胜任工作又环保无边框。
简单地Find and Replace了一下,达到目的了。下面给出上面十一组的完整实现代码,比较笨拙,各位朋友看了之后给点建议,希望能从代码量与复杂度上改进一番!
在“XXX.h”中声明所需变量,这里只给出单选按钮部分:
QRadioButton *jradio11;QRadioButton *jradio12;QRadioButton *jradio13;QRadioButton *jradio14;QRadioButton *jradio21;QRadioButton *jradio22;QRadioButton *jradio23;QRadioButton *jradio24;QRadioButton *jradio31;QRadioButton *jradio32;QRadioButton *jradio33;QRadioButton *jradio34;QRadioButton *jradio41;QRadioButton *jradio42;QRadioButton *jradio43;QRadioButton *jradio44;QRadioButton *jradio51;QRadioButton *jradio52;QRadioButton *jradio53;QRadioButton *jradio54;QWidget *jiaxiangG1;QWidget *jiaxiangG2;QWidget *jiaxiangG3;QWidget *jiaxiangG4;QWidget *jiaxiangG5;QHBoxLayout *jiaxiangH1;QHBoxLayout *jiaxiangH2;QHBoxLayout *jiaxiangH3;QHBoxLayout *jiaxiangH4;QHBoxLayout *jiaxiangH5;
在“XXX.cpp”中实现:
jradio11 = new QRadioButton(this);jradio12 = new QRadioButton(this);jradio13 = new QRadioButton(this);jradio14 = new QRadioButton(this);jradio21 = new QRadioButton(this);jradio22 = new QRadioButton(this);jradio23 = new QRadioButton(this);jradio24 = new QRadioButton(this);jradio31 = new QRadioButton(this);jradio32 = new QRadioButton(this);jradio33 = new QRadioButton(this);jradio34 = new QRadioButton(this);jradio41 = new QRadioButton(this);jradio42 = new QRadioButton(this);jradio43 = new QRadioButton(this);jradio44 = new QRadioButton(this);jradio51 = new QRadioButton(this);jradio52 = new QRadioButton(this);jradio53 = new QRadioButton(this);jradio54 = new QRadioButton(this);jiaxiangG1 = new QWidget(this);jiaxiangG2 = new QWidget(this);jiaxiangG3 = new QWidget(this);jiaxiangG4 = new QWidget(this);jiaxiangG5 = new QWidget(this);jiaxiangH1 = new QHBoxLayout(this);jiaxiangH2 = new QHBoxLayout(this);jiaxiangH3 = new QHBoxLayout(this);jiaxiangH4 = new QHBoxLayout(this);jiaxiangH5 = new QHBoxLayout(this);jiaxiangH1->addWidget(jradio11);jiaxiangH1->addWidget(jradio12);jiaxiangH1->addWidget(jradio13);jiaxiangH1->addWidget(jradio14);jiaxiangG1->setLayout(jiaxiangH1);jiaxiangG1->setGeometry(QRect(705,205,250,35));jiaxiangH2->addWidget(jradio21);jiaxiangH2->addWidget(jradio22);jiaxiangH2->addWidget(jradio23);jiaxiangH2->addWidget(jradio24);jiaxiangG2->setLayout(jiaxiangH2);jiaxiangG2->setGeometry(QRect(705,280,250,35));jiaxiangH3->addWidget(jradio31);jiaxiangH3->addWidget(jradio32);jiaxiangH3->addWidget(jradio33);jiaxiangH3->addWidget(jradio34);jiaxiangG3->setLayout(jiaxiangH3);jiaxiangG3->setGeometry(QRect(705,365,250,35));jiaxiangH4->addWidget(jradio41);jiaxiangH4->addWidget(jradio42);jiaxiangH4->addWidget(jradio43);jiaxiangH4->addWidget(jradio44);jiaxiangG4->setLayout(jiaxiangH4);jiaxiangG4->setGeometry(QRect(705,445,250,35));jiaxiangH5->addWidget(jradio51);jiaxiangH5->addWidget(jradio52);jiaxiangH5->addWidget(jradio53);jiaxiangH5->addWidget(jradio54);jiaxiangG5->setLayout(jiaxiangH5);jiaxiangG5->setGeometry(QRect(705,525,250,35));
QRadioButton分组且无边框的简单实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。