最近在用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分组且无边框的简单实现的更多相关文章

  1. 无边框窗体和timer控件

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...

  2. PyQt之布局&无边框&信号

    这个例子相对综合一些,包括qt的布局,实现无边框效果,无边框也就是没有了窗口的title栏,没有title栏就不能拖动了, 所以我们进一步讲如何实现拖动.通过这边文章你可以掌握qt的布局,窗口定制,重 ...

  3. poi 合并单元格 无边框问题

    public void merge(int startrow,int endstartrow,int startColumn,int endColumn){ sht.addMergedRegion(n ...

  4. 【Qt】Qt之自定义界面(实现无边框、可移动)【转】

    简述 UI设计是指对软件的人机交互.操作逻辑.界面美观的整体设计.好的UI设计不仅是让软件变得有个性.有品位,还要让软件的操作变得舒适简单.自由,充分体现软件的定位和特点. 爱美之心人皆有之.其实软件 ...

  5. Qt之自定义界面(实现无边框、可移动)

    简述 UI设计是指对软件的人机交互.操作逻辑.界面美观的整体设计.好的UI设计不仅是让软件变得有个性.有品位,还要让软件的操作变得舒适简单.自由,充分体现软件的定位和特点. 爱美之心人皆有之.其实软件 ...

  6. C# 无边框异型窗体制作

    我是一个C#的初学者 只要涉及到windows窗体编程 都希望窗体的外观比较好看 不是系统默认的那样 对于C# 更改窗体外观感觉并不那么轻松 更改窗体外观涉及到使用GDI+ 我所知道的有两种方法: 有 ...

  7. 利用WPF创建含多种交互特性的无边框窗体

    咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...

  8. 表格无边框,有内框,在table嵌套时,防止出现重复边线

    <html> <head> <title>test 表格无边框,有内框! ^^ CSDN 学习积累</title> <style type=&qu ...

  9. 移动无边框窗体(设置标志位更流畅,或者发送WM_SYSCOMMAND和SC_MOVE + HTCAPTION消息)

    移动无边框窗体的代码网上很多,其原理都是一样的,但是是有问题的,我这里只是对其修正一下 网上的代码仅仅实现了两个事件 void EditDialog::mousePressEvent(QMouseEv ...

随机推荐

  1. 烂泥:【解决】word复制windows live writer没有图片

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在使用windows live writer发表博客,博客先是在是word2013中进行编辑,编辑完毕后我会复制到windows live writer ...

  2. Mac/Linux 定时运行命令行

    想要开机运行的话可以通过 mac 自带的 Automator 将要运行的命令打包成一个app,用后在用户组的“登录时启动”列表里加上那个app. 但是想要定时运行就不能这么做了,要用上一个叫cront ...

  3. SVN同步大坑

    遇到的问题 这两天一直在搞svn的主从备份,使用的方法是svnsync做的主从同步,同步大部分的仓库都没有什么问题很顺利的就同步完成了,不了解svnsync同步的可以看我这篇,但是在在同步2个仓库的时 ...

  4. volatile 关键字

    就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.如果没有volatile,基本上会导致这样的结果:要么无 ...

  5. myeclipse中运行tomcat报错java.lang.NoClassDefFoundError

    有关myeclipse的小问题,在myeclipse中运行tomcat时显示已启动,但是无法访问localhost:8080/,显示404错误.在控制台中发现报错代码如下: java.lang.NoC ...

  6. uva 297 quadtrees——yhx

    Quadtrees  A quadtree is a representation format used to encode images. The fundamental idea behind ...

  7. Codeforces Round #370 (Div. 2)B. Memory and Trident

    地址:http://codeforces.com/problemset/problem/712/B 题目: B. Memory and Trident time limit per test 2 se ...

  8. maven - pom.xml 聚合(父)工程 基本内容演示

    企业开发中所用到的基本jar包以及插件都已在此 可以自己根据实际情况酌情增减 <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...

  9. 第23章 SEH结构化异常处理(2)_编译器对系统SEH机制的封装

    23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTIO ...

  10. 第22章 DLL注入和API拦截(2)

    22.4 使用远程线程来注入DLL 22.4.1 概述 (1)远程线程注入是指一个进程在另一个进程中创建线程,然后载入我们编写的DLL,并执行该DLL代码的技术.其基本思路是通过CreateRemot ...