DTK教程 四 :一些基本的控件(二) 各个Button

复制项目[ t_03 ],命名为 [ t_04 ]

1、先把各个按钮的头文件引入到mywidget.h中!

//引入各种按钮的头文件

#include   //--->常用

#include 

#include 

#include 

#include 

#include 

2、声明变量

private:    
    DPushButton * pushbutton;
    DLinkButton * linkbutton;
    DTextButton * textbutton;
    DSwitchButton * switchbutton;
    DImageButton * dimagebutton;

3、分配内存(不恰当的是实例化)

 pushbutton  = new DPushButton (this);
    linkbutton = new DLinkButton("这是link按钮") ;  //这两个要在构造的时候指定文本内容
    textbutton = new DTextButton("这是text按钮",this) ;
    switchbutton = new DSwitchButton (this);
    dimagebutton = new DImageButton(this);

最后运行效果如下


DTK教程 四 :一些基本的控件(二) 各个Button_第1张图片
运行效果

这个就让人很难受了,都在一块了!解决这个问题有两个方法,其中一个是像上一篇的DLabel一样,使用move()固定位置。但是这种方法太死板,当窗口大小改变的时候,按钮位置不会改变,会导致布局较为难看!所以说,布局,我们使用第二种方法,使用布局管理!


QVBoxLayout --- 垂直布局

想使用QVBoxLayout,那么我们还要在项目的pro中加入 QT += widgets,具体如下:


DTK教程 四 :一些基本的控件(二) 各个Button_第2张图片
QT += widgets

然后再在mywidget.h中加入 QHBoxLayout的头文件

#include 

水平布局差不多,V改成大写的H就是了[ V:垂直 | H:水平 ]


继续:
利用addWidget() 添加键钮到布局管理器中!
固定按钮的代码如下:

    vboxlayout = new QVBoxLayout(this);

    vboxlayout->addWidget(pushbutton);
    vboxlayout->addWidget(linkbutton);
    vboxlayout->addWidget(textbutton);
    vboxlayout->addWidget(switchbutton);
    vboxlayout->addWidget(dimagebutton);

最后运行效果图


DTK教程 四 :一些基本的控件(二) 各个Button_第3张图片
效果图

是不是解决问题了!!


现在是不是很开心!!!哈哈
开心太早了,有没有发现问题,为什么只有四个按钮,其它的一个了???
为了解决这个问题,我们给没有文字的按钮(dimagebutton 这个要加图片)加文本,看看怎么回事!

修改如下

    pushbutton  = new DPushButton (this);
    pushbutton->setText("这是push按钮");
    linkbutton = new DLinkButton("这是link按钮") ;  //这两个要在构造的时候指定文本内容
    textbutton = new DTextButton("这是text按钮",this) ;
    switchbutton = new DSwitchButton (this);    // switchbutton 不能加文本
    dimagebutton = new DImageButton(this);
    dimagebutton->setNormalPic("/home/sea/Desktop/1.jpg");  //这儿写指定图片文件的路径

最后运行效果图

DTK教程 四 :一些基本的控件(二) 各个Button_第4张图片
运行效果

好了,一些有用的按钮介绍完了 [ 有人就要说了,光有按钮,我点它,它没有反应啊,这让人难受啊!不要难受,我在后面会穿插着讲,现在主要是先知道有哪些控件。我很快就会讲,我保证 ! ]


完整 mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include 

//引入各种按钮的头文件
#include    //--->常用
#include 
#include 
#include 
#include 
#include 

DWIDGET_USE_NAMESPACE

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = 0);

private:    
    DPushButton * pushbutton;
    DLinkButton * linkbutton;
    DTextButton * textbutton;
    DSwitchButton * switchbutton;
    DImageButton * dimagebutton;
    QVBoxLayout * vboxlayout;

signals:

public slots:
};

#endif // MYWIDGET_H

完整 mywidget.cpp

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    pushbutton  = new DPushButton (this);
    pushbutton->setText("这是push按钮");
    linkbutton = new DLinkButton("这是link按钮") ;  //这两个要在构造的时候指定文本内容
    textbutton = new DTextButton("这是text按钮",this) ;
    switchbutton = new DSwitchButton (this);    // switchbutton 不能加文本
    dimagebutton = new DImageButton(this);
    dimagebutton->setNormalPic("/home/sea/Desktop/1.jpg");

    vboxlayout = new QVBoxLayout(this);

    vboxlayout->addWidget(pushbutton);
    vboxlayout->addWidget(linkbutton);
    vboxlayout->addWidget(textbutton);
    vboxlayout->addWidget(switchbutton);
    vboxlayout->addWidget(dimagebutton);

}

下一部分:https://www.jianshu.com/p/d3b0f9aacedf

你可能感兴趣的:(DTK教程 四 :一些基本的控件(二) 各个Button)