这是我经常使用的一个类,它是从 QMessageBox 派生的。您可以使用构造函数来启动自定义按钮。如果你需要更具体的东西,你可以从这个类派生。
如果你想得到一个按钮角色,你可以调用 messageBox->buttonRole(QAbstractButton* buttonInQuestion);
标题。
#ifndef MESSAGEBOX_H
#define MESSAGEBOX_H
#include <QMessageBox>
#include <QPushButton>
class MessageBox : public QMessageBox
{
Q_OBJECT
public:
MessageBox(QWidget* parent, const QString& title, const QString& text,
QMessageBox::Icon icon = QMessageBox::NoIcon,
const QString& btnText1 = "", QMessageBox::ButtonRole btnRole1 = QMessageBox::AcceptRole,
const QString& btnText2 = "", QMessageBox::ButtonRole btnRole2 = QMessageBox::InvalidRole,
const QString& btnText3 = "", QMessageBox::ButtonRole btnRole3 = QMessageBox::InvalidRole);
virtual ~MessageBox();
virtual QPushButton* addButton(const QString& btnText, QMessageBox::ButtonRole btnRole);
QPushButton* button(const unsigned int& index) const;
bool clicked_button(const unsigned int& index) const;
private:
QPushButton *_button1;
QPushButton *_button2;
QPushButton *_button3;
};
#endif // MESSAGEBOX_H
类
#include "messagebox.h"
MessageBox::MessageBox(QWidget* parent, const QString& title, const QString& text,
QMessageBox::Icon icon,
const QString& btnText1, QMessageBox::ButtonRole btnRole1,
const QString& btnText2, QMessageBox::ButtonRole btnRole2,
const QString& btnText3, QMessageBox::ButtonRole btnRole3)
: QMessageBox(icon, title, text,QMessageBox::NoButton, parent),
_button1(0), _button2(0), _button3(0)
{
_button1 = addButton(btnText1, btnRole1);
_button2 = addButton(btnText2, btnRole2);
_button3 = addButton(btnText3, btnRole3);
}
MessageBox::~MessageBox() {
}
QPushButton* MessageBox::addButton(const QString& btnText, QMessageBox::ButtonRole btnRole) {
if (btnRole != QMessageBox::InvalidRole) {
if (btnText.compare("") != 0) {
return QMessageBox::addButton(btnText, btnRole);
} else {
QString stdText("?");
switch (btnRole) {
case QMessageBox::AcceptRole: stdText = tr("&OK"); break;
case QMessageBox::RejectRole: stdText = tr("&Cancel"); break;
case QMessageBox::YesRole: stdText = tr("&Yes"); break;
case QMessageBox::NoRole: stdText = tr("&No"); break;
default: break;
}
return QMessageBox::addButton(stdText, btnRole);
}
}
return 0;
}
QPushButton* MessageBox::button(const unsigned int& index) const {
switch(index) {
case 0: return _button1;
case 1: return _button2;
case 2: return _button3;
default: return 0;
}
}
bool MessageBox::clicked_button(const unsigned int& index) const {
return this->clickedButton() == button(index);
}
示例用法...
MessageBox msg(0, tr("Add Icon"), tr("Icon list already contains this icon!"), QMessageBox::Warning);
msg.exec()