QT 创建对话框 Dialog 实例
1.
2. dialog.h 头文件
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE class QLabel; class QErrorMessage; QT_END_NAMESPACE class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); private slots: void getAge(); void getStature(); void getSex(); void getName(); void getColor(); void getFont(); void getCriticalMessage(); void getInformationMessage(); void getQuestionMessage(); void getWarningMessage(); void getErrorMessage(); private: QLabel *nameLabel; QLabel *sexLabel; QLabel *ageLabel; QLabel *statureLabel; QLabel *colorLabel; QLabel *fontLabel; QLabel *criticalLabel; QLabel *informationLabel; QLabel *questionLabel; QLabel *warningLabel; QLabel *errorLabel; QErrorMessage *errorMessageDialog; }; #endif
3. dialog.cpp源文件
#include <QtGui> #include "dialog.h" #define MESSAGE \ Dialog::tr("<p>Message boxes have a caption, a text, " \ "and any number of buttons, each with standard or custom texts." \ "<p>Click a button to close the message box. Pressing the Esc button " \ "will activate the detected escape button (if any).") Dialog::Dialog(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("Standard Dialogs")); errorMessageDialog = new QErrorMessage(this); int frameStyle = QFrame::Sunken | QFrame::Panel; //Name nameLabel = new QLabel; nameLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel); QPushButton *nameButton = new QPushButton(tr("&Name")); //Sex sexLabel = new QLabel; sexLabel->setFrameStyle(frameStyle); QPushButton *sexButton = new QPushButton(tr("&Sex")); //Age ageLabel = new QLabel; ageLabel->setFrameStyle(frameStyle); QPushButton *ageButton = new QPushButton(tr("&Age")); //Stature statureLabel = new QLabel; statureLabel->setFrameStyle(frameStyle); QPushButton *statureButton = new QPushButton(tr("S&tature")); //Color colorLabel = new QLabel; colorLabel->setFrameStyle(frameStyle); QPushButton *colorButton = new QPushButton(tr("&Color")); //Font fontLabel = new QLabel; fontLabel->setFrameStyle(frameStyle); QPushButton *fontButton = new QPushButton(tr("&Font")); //Critical MessageBox criticalLabel = new QLabel; criticalLabel->setFrameStyle(frameStyle); QPushButton *criticalButton = new QPushButton(tr("Critica&l")); //Information MessageBox informationLabel = new QLabel; informationLabel->setFrameStyle(frameStyle); QPushButton *informationButton = new QPushButton(tr("&Information")); //Question MessageBox questionLabel = new QLabel; questionLabel->setFrameStyle(frameStyle); QPushButton *questionButton = new QPushButton(tr("&Question")); //Warning MessageBox warningLabel = new QLabel; warningLabel->setFrameStyle(frameStyle); QPushButton *warningButton = new QPushButton(tr("&Warning")); //Error MessageBox errorLabel = new QLabel; errorLabel->setFrameStyle(frameStyle); QPushButton *errorButton = new QPushButton(tr("Show &Message")); connect(ageButton, SIGNAL(clicked()), this, SLOT(getAge())); connect(statureButton, SIGNAL(clicked()), this, SLOT(getStature())); connect(sexButton, SIGNAL(clicked()), this, SLOT(getSex())); connect(nameButton, SIGNAL(clicked()), this, SLOT(getName())); connect(colorButton, SIGNAL(clicked()), this, SLOT(getColor())); connect(fontButton, SIGNAL(clicked()), this, SLOT(getFont())); connect(criticalButton, SIGNAL(clicked()), this, SLOT(getCriticalMessage())); connect(informationButton, SIGNAL(clicked()), this, SLOT(getInformationMessage())); connect(questionButton, SIGNAL(clicked()), this, SLOT(getQuestionMessage())); connect(warningButton, SIGNAL(clicked()), this, SLOT(getWarningMessage())); connect(errorButton, SIGNAL(clicked()), this, SLOT(getErrorMessage())); //Setup Layout QGridLayout *layout = new QGridLayout; layout->setColumnStretch(1, 1); layout->setColumnMinimumWidth(1, 250); layout->addWidget(nameButton, 0, 0); layout->addWidget(nameLabel, 0, 1); layout->addWidget(sexButton, 1, 0); layout->addWidget(sexLabel, 1, 1); layout->addWidget(ageButton, 3, 0); layout->addWidget(ageLabel, 3, 1); layout->addWidget(statureButton, 4, 0); layout->addWidget(statureLabel, 4, 1); layout->addWidget(colorButton, 5, 0); layout->addWidget(colorLabel, 5, 1); layout->addWidget(fontButton, 6, 0); layout->addWidget(fontLabel, 6, 1); layout->addWidget(criticalButton, 7, 0); layout->addWidget(criticalLabel, 7, 1); layout->addWidget(informationButton, 8, 0); layout->addWidget(informationLabel, 8, 1); layout->addWidget(questionButton, 9, 0); layout->addWidget(questionLabel, 9, 1); layout->addWidget(warningButton, 10, 0); layout->addWidget(warningLabel, 10, 1); layout->addWidget(errorButton, 11, 0); layout->addWidget(errorLabel, 11, 1); setLayout(layout); } void Dialog::getAge() { bool ok; int age = QInputDialog::getInteger(this,tr("User Age"), tr("Please input age"),ageLabel->text().toInt(),0,150,1,&ok); if(ok) { ageLabel->setText(QString(tr("%1")).arg(age)); } } void Dialog::getStature() { bool ok; double d = QInputDialog::getDouble(this,tr("Stature"), tr("Please input stature"),6782.5,0,65536.00,1,&ok); if(ok) { statureLabel->setText(QString(tr("%1")).arg(d)); } } void Dialog::getSex() { QStringList items; items << tr("male") << tr("female"); bool ok; QString sex = QInputDialog::getItem(this,tr("Sex"), tr("Please select sex"),items,0,false,&ok); if (ok) { sexLabel->setText(sex); } } void Dialog::getName() { bool ok; QString name = QInputDialog::getText(this,tr("User Name"), tr("Please input new name"),QLineEdit::Normal,nameLabel->text(),&ok); if(ok && !name.isEmpty()) { nameLabel->setText(name); } } void Dialog::getColor() { QColor color = QColorDialog::getColor(Qt::green, this); if (color.isValid()) { colorLabel->setText(color.name()); colorLabel->setPalette(QPalette(color)); colorLabel->setAutoFillBackground(true); } } void Dialog::getFont() { bool ok; QFont font = QFontDialog::getFont(&ok, QFont(fontLabel->text()), this); if (ok) { fontLabel->setText(font.key()); fontLabel->setFont(font); } } void Dialog::getCriticalMessage() { QMessageBox::StandardButton reply; reply = QMessageBox::critical(this, tr("QMessageBox::critical()"), MESSAGE, QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore); if (reply == QMessageBox::Abort) { criticalLabel->setText(tr("Abort")); } else if (reply == QMessageBox::Retry) { criticalLabel->setText(tr("Retry")); } else { criticalLabel->setText(tr("Ignore")); } } void Dialog::getInformationMessage() { QMessageBox::StandardButton reply; reply = QMessageBox::information(this, tr("QMessageBox::information()"), MESSAGE); if (reply == QMessageBox::Ok) { informationLabel->setText(tr("OKOK")); } else { informationLabel->setText(tr("Escape")); } } void Dialog::getQuestionMessage() { QMessageBox::StandardButton reply; reply = QMessageBox::question(this, tr("QMessageBox::question()"), MESSAGE, QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); if (reply == QMessageBox::Yes) { questionLabel->setText(tr("Yes")); } else if (reply == QMessageBox::No) { questionLabel->setText(tr("No")); } else { questionLabel->setText(tr("Cancel")); } } void Dialog::getWarningMessage() { QMessageBox msgBox(QMessageBox::Warning, tr("QMessageBox::warning()"), MESSAGE, 0, this); msgBox.addButton(tr("Save &Again"), QMessageBox::AcceptRole); msgBox.addButton(tr("&Continue"), QMessageBox::RejectRole); if (msgBox.exec() == QMessageBox::AcceptRole) { warningLabel->setText(tr("Save Again")); } else { warningLabel->setText(tr("Continue")); } } void Dialog::getErrorMessage() { errorMessageDialog->showMessage( tr("This dialog shows and remembers error messages. " "If the checkbox is checked (as it is by default), " "the shown message will be shown again, " "but if the user unchecks the box the message " "will not appear again if QErrorMessage::showMessage() " "is called with the same message.")); errorLabel->setText(tr("If the box is unchecked, the message " "won't appear again.")); }