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));
时间: 2024-11-08 00:35:32

QRadioButton分组且无边框的简单实现的相关文章

无边框窗体、后台创建控件、简单通讯

一.无边框窗体 1.控制按钮如何制作: 就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 (1)美化一下的话那就可以把鼠标移入,移出,按下三个事件让按钮改变样式 (2)如何获取图片的相对路径 //鼠标移入时显示的图片 private void pictureBox1_MouseEnter(object sender, EventArgs e) { pictureBox1.BackgroundImage = Image.FromFile(Applicatio

解决 GTK+/GNOME 3 环境下 Java Swing 程序使用本地 GTK+ 主题时菜单无边框 bug 的方法

在 GTK+/GNOME 3 环境下采用默认的 Adwaita 主题时,Java Swing 程序如果使用本地 GTK+ 主题会出现菜单无边框的 bug,这个问题也可能在其他常用的 GTK+ 主题中出现.说这是 Java Swing 的 bug 还是 GTK+/GNOME 3 的主题(如 Adwaita)的 bug 其实意义不是太大.这里给出一个简单的解决办法,其思路是修改 GTK+/GNOME 3 的主题,这里以系统默认的 Adwaita 主题为例: Adwaita 主题文件位于 /usr/s

Qt:移动无边框窗体(使用Windows的SendMessage)

移动无边框窗体的代码网上很多,其原理都是一样的,但是是有问题的,我这里只是对其修正一下 网上的代码仅仅实现了两个事件 [cpp] view plain copy void EditDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_DragPosition = event->globalPos() - this->pos(); event->accept()

Winform自定义无边框窗体

你还在为Winform原生窗体的丑陋而烦恼么?下面来看一下如何制作一个既漂亮又简单的窗体 先看一下效果图: 首先我们新建一个窗体FormM继承原生Form 看一下主要的代码 public partial class FormM : Form { public FormM() { InitializeComponent(); } /// <summary> /// 是否允许最大化 /// </summary> private bool maxVisible = true; [Desc

【Qt】移动无边框窗体

分类: Qt2013-05-08 22:55 3027人阅读 评论(7) 收藏 举报 移动无边框窗体的代码网上很多,其原理都是一样的,但是是有问题的,我这里只是对其修正一下 网上的代码仅仅实现了两个事件 [cpp] view plaincopy void EditDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_DragPosition = event->global

WinForm 无边框窗体和timer控件

一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图片的相对路径Application.StartupPath + "\\..\\..\\images\\btn_close_highlight.png" \..\文件夹名称... 向上翻一个文件夹 2.如何让窗体动起来调用窗体移动的API 如果有其它控件覆盖了窗体,那么写好鼠标按下的事件委托

Winform拖拽改变无边框窗体大小

大家在进行Winform开发过程中,很容易就可以完成一个窗口的布局工作,但现在的软件界面美化效果一个比一个好,很多软件都是无边框的,于是乎,你是不是也感叹:winform的带边框的窗体如此丑陋,我一定要把边框去掉!OK,去掉边框对Winform来说那绝对一件相当easy的事情,一句this.FormBorderStyle=FormBorderStyle.None就可搞定.       简单倒是简单,边框去掉了,达到了自己的要求,但同时来了很多麻烦,其中一个就是窗口无法拖动改变大小了(这个问题在网

WPF 无边框button

项目中,有时会需要无边框的Button,如果没有特别的其他功能需要,我们可以更简单的实现这一点: <Button Content="myButton" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"/> 当然,上面的按钮类似于ToolBar风格,移动到上面是蓝色背景. 如果想进一步简单修改,可以用以下方法,实现移动到按钮上出现阴影,按下时内容缩小的功能: <Button Comm

使用WPF创建无边框窗体

一.无边框窗口添加窗口阴影 实际上在WPF中添加无边框窗口的窗口阴影十分简单. 首先,设置WindowStyle="None"以及AllowsTransparency="True"使得窗口无边框.并对Window添加DropShadowEffect效果并设定相关参数,在这里我根据设计师的要求设置ShadowDepth="1" BlurRadius="6" Direction="270" Opacity=&q