最近在用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));