原因

今天在重做QMessageBox样式的时候,需要给QMessageBox样式加个阴影,因为重做的MessageBox是用QDialog做的,加阴影的方法是在这个QDialog后面做又重做了个窗体,让后面的窗体进行偏移,显示出阴影效果,后面的窗体是用QWidget做的,QWidget只有show方法,无法做到阻塞和取返回值,所以重写了QDialog的exec()函数,下面贴出主要代码。

代码

“`c++
.h
protected:
int m_result;
int exec();//重写
void closeEvent(QCloseEvent* event);
private slots:
void on_messageBox_ok_clicked();//pushbutton 槽函数
void on_messageBox_cancel_clicked();

<pre><code class=""><br /><br />“`c++
.cpp
//下面的shadowsWin是我的背景阴影的一个类,不需要的可以不用在意
void messageBox::on_message_btn_ok_clicked()
{
m_result = QDialogButtonBox::Ok;
shadowsWin->close();
this->close();
}

void messageBox::on_message_btn_cancel_clicked()
{
m_result = QDialogButtonBox::Cancel;
shadowsWin->close();
this->close();
}

int messageBox::exec()
{
this->show();
shadowsWin->show();
m_eventLoop = new QEventLoop(this);
m_eventLoop->exec();
return m_result;
}

void messageBox::closeEvent(QCloseEvent *event)
{
if (m_eventLoop != NULL)
{
m_eventLoop->exit();//退出事件,还给主事件
}
event->accept();
}

主要代码就上面的几个函数,如果有需要阴影类文件了可以留邮箱,我发给你

发表评论

电子邮件地址不会被公开。