复制项目[ t_03 ],命名为 [ t_04 ]
1、先把各个按钮的头文件引入到mywidget.h中!
//引入各种按钮的头文件
#include <dpushbutton.h> //--->常用
#include <dlinkbutton.h>
#include <dtextbutton.h>
#include <dswitchbutton.h>
#include <dimagebutton.h>
#include <ddialog.h>
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);
最后运行效果如下
这个就让人很难受了,都在一块了!解决这个问题有两个方法,其中一个是像上一篇的DLabel一样,使用move()固定位置。但是这种方法太死板,当窗口大小改变的时候,按钮位置不会改变,会导致布局较为难看!所以说,布局,我们使用第二种方法,使用布局管理!
QVBoxLayout --- 垂直布局
想使用QVBoxLayout,那么我们还要在项目的pro中加入 QT += widgets,具体如下:
然后再在mywidget.h中加入 QHBoxLayout的头文件
#include <QVBoxLayout>
水平布局差不多,V改成大写的H就是了[ V:垂直 | H:水平 ]
继续:
利用addWidget() 添加键钮到布局管理器中!
固定按钮的代码如下:
vboxlayout = new QVBoxLayout(this);
vboxlayout->addWidget(pushbutton);
vboxlayout->addWidget(linkbutton);
vboxlayout->addWidget(textbutton);
vboxlayout->addWidget(switchbutton);
vboxlayout->addWidget(dimagebutton);
最后运行效果图
是不是解决问题了!!
现在是不是很开心!!!哈哈
开心太早了,有没有发现问题,为什么只有四个按钮,其它的一个了???
为了解决这个问题,我们给没有文字的按钮(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"); //这儿写指定图片文件的路径
最后运行效果图
好了,一些有用的按钮介绍完了 [ 有人就要说了,光有按钮,我点它,它没有反应啊,这让人难受啊!不要难受,我在后面会穿插着讲,现在主要是先知道有哪些控件。我很快就会讲,我保证 ! ]
完整 mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
//引入各种按钮的头文件
#include <dpushbutton.h> //--->常用
#include <dlinkbutton.h>
#include <dtextbutton.h>
#include <dswitchbutton.h>
#include <dimagebutton.h>
#include <QVBoxLayout>
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);
}