这里是我经常使用的从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()
静态方法没有实例化他们正在与相关联的类对象。除非你已经做了一个单身人士或其他东西。 – vincent
@vincent所以我不能为我的子类使用静态方法? – mrg95
你可以,但是你不能访问与实例化类相关的变量,除非它们也是静态的。你想做什么? – vincent