操作系统:Fedora Linux 14
程序实现效果:
创建文件夹Drawer,以下是代码(三个文件)
/** Object: Drawer
** Desc: 实现QQ抽屉效果
** File: main.cpp
** Compile:qmake-qt4 -project;qmake-qt4;make;
** Author: LiXiujie
** Date: 2011-05-12
** Note: 编译说明:
** qmake-qt4 -prject 自动生成程序的项目文件(*.pro);
** qmake-qt4 用于生成程序的Makefile文件;
** make 编译 Makefile 文件得到可执行文件。
** */
#include <QApplication> // 所有QT图形化应用程序必须包含此文件,它包含了QT图形化应用程序的各种资源、基本设置、控制流及事件处理等。
#include "Drawer.h" // 自定义类头文件
int main(int argc, char *argv[]){
QApplication app(argc, argv);
Drawer *drawer = new Drawer();
drawer->show();
return app.exec();
}
=====================================
/** Object: Drawer
** Desc: 实现QQ抽屉效果
** File: Drawer.h
** Class: Drawer 实现QQ抽屉效果类 头文件
** Compile:qmake-qt4 -project;qmake-qt4;make;
** Author: LiXiujie
** Date: 2011-05-12
** Note: 编译说明:
** qmake-qt4 -prject 自动生成程序的项目文件(*.pro);
** qmake-qt4 用于生成程序的Makefile文件;
** make 编译 Makefile 文件得到可执行文件。
** */
#ifndef DRAWER_H
#define DRAWER_H
#include <QtGui>
class Drawer : public QToolBox
{
Q_OBJECT
public:
Drawer(QWidget *parent = 0);
QToolButton *m_pTB1_1;
QToolButton *m_pTB1_2;
QToolButton *m_pTB1_3;
QToolButton *m_pTB1_4;
QToolButton *m_pTB1_5;
QToolButton *m_pTB2_1;
QToolButton *m_pTB2_2;
QToolButton *m_pTB3_1;
QToolButton *m_pTB3_2;
private:
QToolButton * initToolButton(const QString &sText, const QString &sIconFile);
private slots:
};
#endif // DRAWER_H
=====================================
/** Object: Drawer
** Desc: 实现QQ抽屉效果
** File: Drawer.h
** Class: Drawer 实现QQ抽屉效果类 源文件
** Compile:qmake-qt4 -project;qmake-qt4;make;
** Author: LiXiujie
** Date: 2011-05-12
** Note: 编译说明:
** qmake-qt4 -prject 自动生成程序的项目文件(*.pro);
** qmake-qt4 用于生成程序的Makefile文件;
** make 编译 Makefile 文件得到可执行文件。
** */
#include "Drawer.h"
Drawer::Drawer(QWidget *parent) : QToolBox(parent){
setWindowTitle(tr("My QQ")); // 设置窗口标题
m_pTB1_1 = initToolButton(tr("beibei"), QString("images/bb.png")); // 工具按钮控件实例化并初始化
m_pTB1_2 = initToolButton(tr("jingjing"), QString("images/jj.png"));
m_pTB1_3 = initToolButton(tr("huanhuan"), QString("images/hh.png"));
m_pTB1_4 = initToolButton(tr("yingying"), QString("images/yy.png"));
m_pTB1_5 = initToolButton(tr("nini"), QString("images/nn.png"));
m_pTB2_1 = initToolButton(tr("pizicai"), QString("images/1.png"));
m_pTB2_2 = initToolButton(tr("feiyang"), QString("images/2.png"));
m_pTB3_1 = initToolButton(tr("QQ"), QString("images/3.png"));
m_pTB3_2 = initToolButton(tr("angel"), QString("images/4.png"));
QGroupBox *pGroupBox1 = new QGroupBox; // 分组盒子控件
QGroupBox *pGroupBox2 = new QGroupBox;
QGroupBox *pGroupBox3 = new QGroupBox;
QVBoxLayout *pVBL1 = new QVBoxLayout(pGroupBox1); // 分组盒子控件的垂直布局
QVBoxLayout *pVBL2 = new QVBoxLayout(pGroupBox2);
QVBoxLayout *pVBL3 = new QVBoxLayout(pGroupBox3);
pVBL1->setMargin(10); // 布局控件四周边距为10像素。
pVBL1->setAlignment(Qt::AlignHCenter); // 布局中元素对齐方式为水平居中
pVBL2->setMargin(10);
pVBL2->setAlignment(Qt::AlignHCenter);
pVBL3->setMargin(10);
pVBL3->setAlignment(Qt::AlignHCenter);
pVBL1->addWidget(m_pTB1_1); // 按钮控件加入布局中
pVBL1->addWidget(m_pTB1_2);
pVBL1->addWidget(m_pTB1_3);
pVBL1->addWidget(m_pTB1_4);
pVBL1->addWidget(m_pTB1_5);
pVBL1->addStretch(); // 占位符,延伸块, 保持所有按钮靠上对齐
pVBL2->addWidget(m_pTB2_1);
pVBL2->addWidget(m_pTB2_2);
pVBL2->addStretch();
pVBL3->addWidget(m_pTB3_1);
pVBL3->addWidget(m_pTB3_2);
pVBL3->addStretch();
this->addItem((QWidget *)pGroupBox1, tr("My Friends"));
this->addItem((QWidget *)pGroupBox2, tr("Stranger"));
this->addItem((QWidget *)pGroupBox3, tr("Blacklist"));
}
QToolButton * Drawer::initToolButton(const QString &sText, const QString &sIconFile){
QToolButton *pTB = new QToolButton; // 工具按钮控件实例化,带有图标功能
pTB->setText(sText); // 设置按钮文字
pTB->setIcon(QPixmap(sIconFile)); // 设置按钮图标
pTB->setIconSize(QSize(72,72)); // 设置按钮中图标宽高
pTB->setAutoRaise(TRUE); // 设置按钮在鼠标离开后自动弹起恢复原样。
pTB->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 设置按钮文字在图标下方样式
return pTB;
}
=====================================
资源图片: