zoukankan      html  css  js  c++  java
  • 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));
  • 相关阅读:
    netlink(todo)
    【拓展】如何画好架构图
    【JS】527- 关于 JS 中的浮点计算
    【CSS】526- CSS 控制图标颜色
    【拓展】一个故事讲完CPU的工作原理
    【面试题】525- 阿里 P6 的面经
    【生活】你在第几楼?80后、90后扎心图鉴
    【JS】524- 三分钟迁移 Ant Design 4
    【Web技术】522- 设计体系的响应式设计
    【适配】521- 移动端开发各种兼容适配问题(屏幕、图像、字体与布局等)
  • 原文地址:https://www.cnblogs.com/tgyf/p/3984373.html
Copyright © 2011-2022 走看看