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