Qt中GUI设计与制作之常用控件

今天上班有点不愉快,中午因为从SVN下载项目,自己配置环境就用了半个多小时,很生气。发现还是Qt掌握的少。。。写代码的时候有些控件没印象。写C++时对指针有误解。。诶。
今天晚上看了一本书,叫Qt5开发实战。专门看了第三章一部分,并照着书敲了一下代码。
但是这个代码有些错误,不会,明天要请教一下,我会改正确的,请放心
这个代码是关于复选框控件的单选多选问题 QCheckBox和QButtonGroup

**

GUI设计与制作

**
开发应用程序GUI时所需的控件。
控件显示数据和信息,用户也可以直接输入。

3.1基础控件

  1. 使用setGeometry()方法布局控件时,setGeometry()虽然可以改变Window窗体的大小,但是不能改变控件的位置和大小。

    而使用layout布局时,即可改变Window窗口的大小,也可以改变控件的位置和大小

    使用QStyle类可以在应用程序中改变控件的风格,改变UI的整体风格。 还为用户提供可直接定制UI风格的机制,利用Qt Style
    Sheet实现定制此方法 使用HTML CSS,并将其应用于控件。 例如: 在QLineEdit控件上应用CSS,
    QlineEdit{background:yellow}

Qt控件
基础控件(Basic Widget)
按钮(Button),下拉列表框(Combo Box),滚动(Scroll)等可直接使用的控件

QCheckBox        复选框(CheckBox)控件(包含TexT Label)
QcomboBox        单击按钮,可在弹出的选项中选择一个
QpushButton      普通按钮控件
QradioButton     单选按钮控件(包含Text Label)
QcommandLinkButton         Windows Vista风格的命令链接按钮
QtimeEdit\QdateEdit        编辑或显示时间\日期的控件
QdateTimeEdit              编辑或显示时间和日期的控件
QfontComboBox              可使用选择字体的下拉列表框控件
Qlabel                     显示文本或图片的控件
QlineEdit                  单行(single line)文本框控件
Qmenu                可在菜单栏(MenuBar)的菜单控件,Context和弹出菜单中使用的控件
QprgressBar          水平与垂直进度条
QscrollArea          可以扩展查看其他控件的滚动(Scroll)控件
QscrollBar           水平与垂直滚动条
QsizeGrip            可以改变最上层视窗的大小
Qslider              水平与垂直滑块
QtaBar               TabBar控件(在标签对话框中使用)
QtabWidget           Tab空间
QtoolBox             成列的Tab控件
QtoolButton          用于QtoolBox控件中,基于选项或命令可以快速访问的按钮控件
Qwidget              所有项目的基类

组合控件
QButtinGroup 按钮控件的组合容器(Container) QGroupBox
带有标题的相同类型的组框(GroupBox Frame)
QSplitter 具有控制分割功能的控件 QSplitterHandle
可以控制分割功能的控件 QStackedWidGet
可以使屏幕上同时显示多个控件 QTabWidget tab控件

抽象控件类(Abstract Widget Class)是控件的基类。
QPushButton是QAbstractButton的子类
QAbstractButton 提供普通按钮功能的抽象类
QAbstractScrollArea 在滚动条中提供必要功能的抽象类
QAbstractSlider 使用给定范围内的整数值的抽象类
QDialog 对话窗口的基类
QFrame 存放框架控件的基类
3.1.1   QCheckBox和QButtonGroup
 复选框(CheckBox)控件(包含TexT Label) 
 按钮控件的组合容器(Container)
 复选框提供了可以多选的用户界面
  
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    /** QCheckBox有Check(On)和UnCheck(off)两个选项,可任选其一。
        第一个参数是CheckBox项目文本,第二个参数可以声明父类
        "&"  字符表示可以使用CheckBox的快捷键
        Alt+E可以激活或禁用CheCkBox
    */
    //QCheckBox *chk=new QCheckBox("P&rogramming",this);
    /**
        使用CheckBox时,可以使用QButtonGroup将其分为多个组
        第一个参数指定父类。
        QButtonGroup类控件使用成员函数addButton()将CheckBox包含在组内
    */
    /** 指定包含CheckBox的组 */
    //QButtonGroup *group=new QButtonGroup(this);
    /**
      checkBox特点可在多个项目中多选,
      而若使用QButtonGroup类控件的setExclusive()函数,则可以
      将CheckBox的属性转换为"只能单选"
    */
    /**
      Game,Office,Develop为第一组 特点只能单选
      Programming,Qt,OS为第二组    特点能多选
    */
    QString str1[3]={"Game","Office","Develop"};
    QString str2[3]={"P&rogramming","Q&t","O&S"};
    int xpos=30;
    int ypos=30;
    chk_group[0]=new QButtonGroup(this);
    chk_group[1]=new QButtonGroup(this);
    for(int i=0;i<3;i++)
    {
        exclusive[i]=new QCheckBox(str1[i],this);
        exclusive[i]->setGeometry(xpos,ypos,100,30);
        chk_group[0]->addButton(exclusive[i]);//为第一组

        /** QCheckBox可以向文本位置添加图形。利用QAbstractButton控件的成员函数
            setIcon()便可在QCheckBox中使用图形资源文件
        */
        exclusive[0]->setIcon(QIcon("resources/browser.png"));
    
        non_exclusive[i]=new QCheckBox(str2[i],this);
        non_exclusive[i]->setGeoMetry(xpos+120,ypos,100,30);
        chk_group[1]->addButton(exclusive[i]); //第二组
        //CheckBox使用函数connect()查看是否被用户激活
        connect(exclusive[i],SIGNAL(clicked()),this,SLOT(chkChanged()));

        ypos+=40;
    }
    chk_group[0]->setExclusive(false);//为第一组 特点只能单选
    chk_group[1]->setExclusive(true);//为第二组    特点能多选

}
/** 选择第一组的复选框或未被激活,运行槽函数的成员函数chkChanger()
    若CheckBox被激活,则函数chackState()返回TRUE,否则返回FALSE.
*/
void MainWindow::chkChanged()
{
    for(int i=0;i<3;i++)
    {
        if(exclusive[i]->checkState())
        {
            qDebug("checkbox &d selected",i+1);
        }
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

你可能感兴趣的:(QT)