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