Qt之实现360安全卫士主界面(三)
2012-03-26 11:37:43 来源:WEB开发网m_bPress = bEnable;
//更新
update();
}
}
其中slot_pressed槽函数中发送了一个自定义信号signal_parent,在工具栏部件中会对该信号进行连接,其中信号的参数为按钮对象的指针。工具栏部件连接该信号的槽函数为slot_set函数:
View Code
//槽函数
void ToolBar:: slot_set(void *pObject)
{
for(int nIndex = 0;nIndex<WIDGET_CNT;++nIndex)
{
if(m_listMyBtnPoint.at(nIndex)!=pObject)
{
m_listMyBtnPoint.at(nIndex)->SetPress(false);
}
}
}
总体意思是:例如有A,B,C三个按钮在工具栏中,如果按下了A按钮,这是按下B按钮时,发送信号给工具栏,然后在工具栏对应的槽函数中进行指针值对比,如果不是B按钮,就调用其他对应按钮的SetPress函数,并设置为false,这样A按钮就没有按下去的背景效果了(排他性)。
三、工具栏按钮效果绘制
绘制当然要在按钮的paintEvent事件处理函数中实现了,代码如下所示,代码注释的很详细,我就不多说了:
View Code
//重绘事件
void MyBtn::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
//如果按钮被按下
if(m_bPress)
{
//绘制被按下时的效果
painterinfo(150,200,&painter);
}
else if(m_bOver)//如果按钮没有被按下并且鼠标移到按钮上
{
//绘制鼠标移到按钮上的按钮效果
painterinfo(50,100,&painter);
}
//调用基类的重绘事件以显示图像文本等
QToolButton::paintEvent(event);
}
//绘制背景渐变
void MyBtn::painterinfo(int nTopPartOpacity,int nBottomPartOpacity,QPainter *pPainter)
{
//设置画笔
QPen objPen(Qt::NoBrush,1);
pPainter->setPen(objPen);
//设置渐变画刷
QLinearGradient objLinear(rect().topLeft(),rect().bottomLeft());
//顶部颜色和透明度
objLinear.setColorAt(0,QColor(150,150,150,nTopPartOpacity));
//中间颜色和透明度
objLinear.setColorAt(0.5,QColor(50,50,50,255));
//底部颜色和透明度
objLinear.setColorAt(1,QColor(100,100,100,nBottomPartOpacity));
QBrush objBrush(objLinear);
pPainter->setBrush(objBrush);
//画圆角矩形
pPainter->drawRoundedRect(rect(),5,5);
更多精彩
赞助商链接