一、前言
在Qt中经常需要弹出窗口,QMessageBox可以实现此功能,一共有三种窗口,information, question, 和 warning,critical, about分别对应感叹号,问号和叉号等等,使用方法很简单,一共有三个参数,第一个是父窗口句柄,剩下两个分别为窗口名称和显示内容,显示内容为QString类型。
二、常用弹出框
提示型:
QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes, QMessageBox::Yes);
错误型:
QMessageBox::critical(NULL, "critical", "Content", QMessageBox::Yes, QMessageBox::Yes);
警告型:
QMessageBox::warning(NULL, "warning", "Content", QMessageBox::Yes, QMessageBox::Yes);
提问型:
QMessageBox::question(NULL, "question", "Content", QMessageBox::Yes, QMessageBox::Yes);
关于对话框:
QMessageBox::about(NULL, "About", "About this application");
三、自定义弹出框
自定义型,例如可以加图片:
QMessageBox message(QMessageBox::NoIcon, "Title", "Content with icon.");
message.setIconPixmap(QPixmap("icon.png"));
message.exec();
这里我们使用的是exec()函数,而不是show(),因为这是一个模态对话框,需要有它自己的事件循环,否则的话,我们的对话框会一闪而过。
同其他的程序类似,我们在程序中定义的相对路径都是要相对于运行时的.exe文件的地址的。比如我们写"icon.png",意思是是在.exe的当前目录下寻找一个"icon.png"的文件。
返回值处理,static函数都是要返回一个StandardButton,我们就可以通过判断这个返回值来对用户的操作做出相应。
QMessageBox::StandardButton rb = QMessageBox::question(NULL, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if(rb == QMessageBox::Yes)
{
QMessageBox::aboutQt(NULL, "About Qt");
}
自定义对话框的判断方式:
QMessageBox message(QMessageBox::NoIcon, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, NULL);
if(message.exec() == QMessageBox::Yes)
{
QMessageBox::aboutQt(NULL, "About Qt");
}
四、究极弹出框
对,究极自定义弹出框。
QWidget替换QMessageBox,同时设置好QSS,设计出的效果会比系统自带的MessageBox好看一丢丢。
调用自定义类 CMessage
.h
CMessage m_message;//声明成员变量
.cpp
m_message.show();
QPoint point = cursor().pos();
m_message.move(point.x(),point.y());//弹出框跟随鼠标点击位置
自定义类CMessage
有一点需要注意,在点击【确定】时,触发信号传递信号,使得主窗口调用相应槽函数作出相应操作(比如删除文件等)
emit sigOk();