WEB开发网
开发学院软件开发汇编语言 Qt之实现360安全卫士主界面(三) 阅读

Qt之实现360安全卫士主界面(三)

 2012-03-26 11:37:43 来源:WEB开发网   
核心提示: 单击按钮时和鼠标移到按钮上时,按钮背景会不同,Qt之实现360安全卫士主界面(三),并且单击其他按钮时,已单击的那个按钮背景应该恢复,所以rect()函数返回的值也是未知的;当放在resizeEvent事件中进行处理时,工具栏部件显示出来的时候,下面讲解其具体实现,一、工具栏的创建 工具栏当然是自定义的部

 

 单击按钮时和鼠标移到按钮上时,按钮背景会不同,并且单击其他按钮时,已单击的那个按钮背景应该恢复。下面讲解其具体实现。

一、工具栏的创建

      工具栏当然是自定义的部件了(继承于QWidget),工具栏上的那些按钮都是继承于QToolButton;其中有9个按钮,最右边的是label;工具栏类的成员变量如下所示:

View Code

QList<MyBtn*> m_listMyBtnPoint;//自定义按钮

QList<QString> m_listMyStr;//按钮对应的文本

QLabel *m_pLabel;//label,显示logo

      首先当然是创建这些子部件了,和一般的没啥区别:

View Code

//CreateWidget创建部件

void ToolBar::CreateWidget()

{

    //文本例子

    m_listMyStr<<"Examine"<<"KillTrojan"<<"CleanDust"<<"LeakRepair"<<"SysRepair"

                         <<"CleanCom"<<"FunFull"<<"SoftMan"<<"OptSpeed";

    //创建toolbutton

    for(int nIndex = 0;nIndex<WIDGET_CNT;++nIndex)

    {

        //图像资源路径

        QString strImage = QString(":/image/%1.png").arg(nIndex+1);

        //创建自定义QToolButton(MyBtn)

        m_listMyBtnPoint.append(new MyBtn(strImage,m_listMyStr[nIndex],this));

        //设置toolbutton的位置

        m_listMyBtnPoint.at(nIndex)->move(nIndex*TOOLWIDGET_H+VALUE_DIS,0);

        //该信号槽设置其他按钮的按下状态bool值

        connect(m_listMyBtnPoint.at(nIndex),SIGNAL(signal_parent(void*)),this,SLOT(slot_set(void*)));

    }

    //创建label

    m_pLabel = new QLabel(this);

    m_pLabel->setPixmap(QPixmap(":/image/logo.png"));

}

      工具栏里的按钮和label都是手动定位(即设置位置信息),所以重写了resizeEvent事件,在resizeEvent事件里进行部件定位,如下所示:

View Code

//resizeEvent

void ToolBar::resizeEvent (QResizeEvent * event)

{

    //按钮垂直居中

    m_pLabel->move(rect().width()-m_pLabel->pixmap()->width()-VALUE_DIS,(rect().height()-m_pLabel->pixmap()->height())/2);

}

      大家可能会想:在resizeEvent事件里只对label进行定位了,那其他9个按钮了?因为其他9个按钮都是从最左边(也就是0)计算相对位移,而label是从最右边计算的,通过rect()函数获得工具栏的最右边位置信息;按钮在创建部件函数的时候就定位了位置,如果label也在那个时候定位位置的话是错误的,因为那是工具栏部件的大小是未知的,所以rect()函数返回的值也是未知的;当放在resizeEvent事件中进行处理时,工具栏部件显示出来的时候,其大小都是可以确定的。

1 2 3  下一页

Tags:Qt 实现 安全

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接