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));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM