zl程序教程

您现在的位置是:首页 >  工具

当前栏目

QT中的各种对话框

Qt 各种 对话框
2023-09-14 08:59:44 时间

界面效果图如下,大家可以用代码自己操作

image

diglog.h

#ifndef DIALOG_H

#define DIALOG_H

#include QDialog 

QT_BEGIN_NAMESPACE

class QCheckBox;

class QLabel;

class QErrorMessage;

QT_END_NAMESPACE

class Dialog : public QDialog

 Q_OBJECT

public:

 Dialog(QWidget *parent = 0);

private slots:

 void setInteger();

 void setDouble();

 void setItem();

 void setText();

 void setColor();

 void setFont();

 void setExistingDirectory();

 void setOpenFileName();

 void setOpenFileNames();

 void setSaveFileName();

 void criticalMessage();

 void informationMessage();

 void questionMessage();

 void warningMessage();

 void errorMessage();

private:

 QCheckBox *native;

 QLabel *integerLabel;

 QLabel *doubleLabel;

 QLabel *itemLabel;

 QLabel *textLabel;

 QLabel *colorLabel;

 QLabel *fontLabel;

 QLabel *directoryLabel;

 QLabel *openFileNameLabel;

 QLabel *openFileNamesLabel;

 QLabel *saveFileNameLabel;

 QLabel *criticalLabel;

 QLabel *informationLabel;

 QLabel *questionLabel;

 QLabel *warningLabel;

 QLabel *errorLabel;

 QErrorMessage *errorMessageDialog;

 QString openFilesPath;

#endif

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)

 errorMessageDialog = new QErrorMessage(this);

 int frameStyle = QFrame::Sunken | QFrame::Panel;

 integerLabel = new QLabel;

 integerLabel- setFrameStyle(frameStyle);

 QPushButton *integerButton =

 new QPushButton(tr("QInputDialog::get Int()"));

 doubleLabel = new QLabel;

 doubleLabel- setFrameStyle(frameStyle);

 QPushButton *doubleButton =

 new QPushButton(tr("QInputDialog::get Double()"));

 itemLabel = new QLabel;

 itemLabel- setFrameStyle(frameStyle);

 QPushButton *itemButton = new QPushButton(tr("QInputDialog::getIte m()"));

 textLabel = new QLabel;

 textLabel- setFrameStyle(frameStyle);

 QPushButton *textButton = new QPushButton(tr("QInputDialog::get Text()"));

 colorLabel = new QLabel;

 colorLabel- setFrameStyle(frameStyle);

 QPushButton *colorButton = new QPushButton(tr("QColorDialog::get Color()"));

 fontLabel = new QLabel;

 fontLabel- setFrameStyle(frameStyle);

 QPushButton *fontButton = new QPushButton(tr("QFontDialog::get Font()"));

 directoryLabel = new QLabel;

 directoryLabel- setFrameStyle(frameStyle);

 QPushButton *directoryButton =

 new QPushButton(tr("QFileDialog::getE xistingDirectory()"));

 openFileNameLabel = new QLabel;

 openFileNameLabel- setFrameStyle(frameStyle);

 QPushButton *openFileNameButton =

 new QPushButton(tr("QFileDialog::get OpenFileName()"));

 openFileNamesLabel = new QLabel;

 openFileNamesLabel- setFrameStyle(frameStyle);

 QPushButton *openFileNamesButton =

 new QPushButton(tr("QFileDialog:: getOpenFileNames()"));

 saveFileNameLabel = new QLabel;

 saveFileNameLabel- setFrameStyle(frameStyle);

 QPushButton *saveFileNameButton =

 new QPushButton(tr("QFileDialog::get SaveFileName()"));

 criticalLabel = new QLabel;

 criticalLabel- setFrameStyle(frameStyle);

 QPushButton *criticalButton =

 new QPushButton(tr("QMessageBox::critica l()"));

 informationLabel = new QLabel;

 informationLabel- setFrameStyle(frameStyle);

 QPushButton *informationButton =

 new QPushButton(tr("QMessageBox::i nformation()"));

 questionLabel = new QLabel;

 questionLabel- setFrameStyle(frameStyle);

 QPushButton *questionButton =

 new QPushButton(tr("QMessageBox:: question()"));

 warningLabel = new QLabel;

 warningLabel- setFrameStyle(frameStyle);

 QPushButton *warningButton = new QPushButton(tr("QMessageBox:: warning()"));

 errorLabel = new QLabel;

 errorLabel- setFrameStyle(frameStyle);

 QPushButton *errorButton =

 new QPushButton(tr("QErrorMessage::showM essage()"));

 connect(integerButton, SIGNAL(clicked()), this, SLOT(setInteger()));

 connect(doubleButton, SIGNAL(clicked()), this, SLOT(setDouble()));

 connect(itemButton, SIGNAL(clicked()), this, SLOT(setItem()));

 connect(textButton, SIGNAL(clicked()), this, SLOT(setText()));

 connect(colorButton, SIGNAL(clicked()), this, SLOT(setColor()));

 connect(fontButton, SIGNAL(clicked()), this, SLOT(setFont()));

 connect(directoryButton, SIGNAL(clicked()),

 this, SLOT(setExistingDirectory()));

 connect(openFileNameButton, SIGNAL(clicked()),

 this, SLOT(setOpenFileName()));

 connect(openFileNamesButton, SIGNAL(clicked()),

 this, SLOT(setOpenFileNames()));

 connect(saveFileNameButton, SIGNAL(clicked()),

 this, SLOT(setSaveFileName()));

 connect(criticalButton, SIGNAL(clicked()), this, SLOT(criticalMessage()));

 connect(informationButton, SIGNAL(clicked()),

 this, SLOT(informationMessage()));

 connect(questionButton, SIGNAL(clicked()), this, SLOT(questionMessage()));

 connect(warningButton, SIGNAL(clicked()), this, SLOT(warningMessage()));

 connect(errorButton, SIGNAL(clicked()), this, SLOT(errorMessage()));

 native = new QCheckBox(this);

 native- setText("Use native file dialog.");

 native- setChecked(true);

 QGridLayout *layout = new QGridLayout;

 layout- setColumnStretch(1, 1);

 layout- setColumnMinimumWidth(1, 250);

 layout- addWidget(integerButton, 0, 0);

 layout- addWidget(integerLabel, 0, 1);

 layout- addWidget(doubleButton, 1, 0);

 layout- addWidget(doubleLabel, 1, 1);

 layout- addWidget(itemButton, 2, 0);

 layout- addWidget(itemLabel, 2, 1);

 layout- addWidget(textButton, 3, 0);

 layout- addWidget(textLabel, 3, 1);

 layout- addWidget(colorButton, 4, 0);

 layout- addWidget(colorLabel, 4, 1);

 layout- addWidget(fontButton, 5, 0);

 layout- addWidget(fontLabel, 5, 1);

 layout- addWidget(directoryButton, 6, 0);

 layout- addWidget(directoryLabel, 6, 1);

 layout- addWidget(openFileNameButton, 7, 0);

 layout- addWidget(openFileNameLabel, 7, 1);

 layout- addWidget(openFileNamesButton, 8, 0);

 layout- addWidget(openFileNamesLabel, 8, 1);

 layout- addWidget(saveFileNameButton, 9, 0);

 layout- addWidget(saveFileNameLabel, 9, 1);

 layout- addWidget(criticalButton, 10, 0);

 layout- addWidget(criticalLabel, 10, 1);

 layout- addWidget(informationButton, 11, 0);

 layout- addWidget(informationLabel, 11, 1);

 layout- addWidget(questionButton, 12, 0);

 layout- addWidget(questionLabel, 12, 1);

 layout- addWidget(warningButton, 13, 0);

 layout- addWidget(warningLabel, 13, 1);

 layout- addWidget(errorButton, 14, 0);

 layout- addWidget(errorLabel, 14, 1);

 layout- addWidget(native, 15, 0);

 setLayout(layout);

 setWindowTitle(tr("Standard Dialogs"));

void Dialog::setInteger()

//! [0]

 bool ok;

 int i = QInputDialog::getInt(this, tr("QInputDialog::getInteger()"),

 tr("Percentage:"), 25, 0, 100, 1, ok);

 if (ok)

 integerLabel- setText(tr("%1%").arg(i));

//! [0]

void Dialog::setDouble()

//! [1]

 bool ok;

 double d = QInputDialog::getDouble(this, tr("QInputDialog::getDouble()"),

 tr("Amount:"), 37.56, -10000, 10000, 2, ok);

 if (ok)

 doubleLabel- setText(QString("$%1").arg(d));

//! [1]

void Dialog::setItem()

//! [2]

 QStringList items;

 items tr("Spring") tr("Summer") tr("Fall") tr("Winter");

 bool ok;

 QString item = QInputDialog::getItem(this, tr("QInputDialog::getItem()"),

 tr("Season:"), items, 0, false, ok);

 if (ok !item.isEmpty())

 itemLabel- setText(item);

//! [2]

void Dialog::setText()

//! [3]

 bool ok;

 QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),

 tr("User name:"), QLineEdit::Normal,

 QDir::home().dirName(), ok);

 if (ok !text.isEmpty())

 textLabel- setText(text);

//! [3]

void Dialog::setColor()

 QColor color;

 if (native- isChecked())

 color = QColorDialog::getColor(Qt::green, this);

 else

 color = QColorDialog::getColor(Qt::green, this, "Select Color", QColorDialog::DontUseNativeDialog);

 if (color.isValid()) {

 colorLabel- setText(color.name());

 colorLabel- setPalette(QPalette(color));

 colorLabel- setAutoFillBackground(true);

void Dialog::setFont()

 bool ok;

 QFont font = QFontDialog::getFont( ok, QFont(fontLabel- text()), this);

 if (ok) {

 fontLabel- setText(font.key());

 fontLabel- setFont(font);

void Dialog::setExistingDirectory()

 QFileDialog::Options options = QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly;

 if (!native- isChecked())

 options |= QFileDialog::DontUseNativeDialog;

 QString directory = QFileDialog::getExistingDirectory(this,

 tr("QFileDialog::getExistingDirectory()"),

 directoryLabel- text(),

 options);

 if (!directory.isEmpty())

 directoryLabel- setText(directory);

void Dialog::setOpenFileName()

 QFileDialog::Options options;

 if (!native- isChecked())

 options |= QFileDialog::DontUseNativeDialog;

 QString selectedFilter;

 QString fileName = QFileDialog::getOpenFileName(this,

 tr("QFileDialog::getOpenFileName()"),

 openFileNameLabel- text(),

 tr("All Files (*);;Text Files (*.txt)"),

 selectedFilter,

 options);

 if (!fileName.isEmpty())

 openFileNameLabel- setText(fileName);

void Dialog::setOpenFileNames()

 QFileDialog::Options options;

 if (!native- isChecked())

 options |= QFileDialog::DontUseNativeDialog;

 QString selectedFilter;

 QStringList files = QFileDialog::getOpenFileNames(

 this, tr("QFileDialog::getOpenFileNames()"),

 openFilesPath,

 tr("All Files (*);;Text Files (*.txt)"),

 selectedFilter,

 options);

 if (files.count()) {

 openFilesPath = files[0];

 openFileNamesLabel- setText(QString("[%1]").arg(files.join(", ")));

void Dialog::setSaveFileName()

 QFileDialog::Options options;

 if (!native- isChecked())

 options |= QFileDialog::DontUseNativeDialog;

 QString selectedFilter;

 QString fileName = QFileDialog::getSaveFileName(this,

 tr("QFileDialog::getSaveFileName()"),

 saveFileNameLabel- text(),

 tr("All Files (*);;Text Files (*.txt)"),

 selectedFilter,

 options);

 if (!fileName.isEmpty())

 saveFileNameLabel- setText(fileName);

void Dialog::criticalMessage()

 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::informationMessage()

 QMessageBox::StandardButton reply;

 reply = QMessageBox::information(this, tr("QMessageBox::information()"), MESSAGE);

 if (reply == QMessageBox::Ok)

 informationLabel- setText(tr("OK"));

 else

 informationLabel- setText(tr("Escape"));

void Dialog::questionMessage()

 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::warningMessage()

 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::errorMessage()

 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 "

 "wont appear again."));

main.cpp

#include QApplication 

#include QTranslator 

#include QLocale 

#include QLibraryInfo 

#include "dialog.h"

int main(int argc, char *argv[])

 QApplication app(argc, argv);

 QString translatorFileName = QLatin1String("qt_");

 translatorFileName += QLocale::system().name();

 QTranslator *translator = new QTranslator( app);

 if (translator- load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))

 app.installTranslator(translator);

 Dialog dialog;

 return dialog.exec();

}

C/C++ Qt 标准Dialog对话框组件应用 在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog,QFileDialog 这几种,这里我将总结本人在开发过程中常用到的标准对话框的使用技巧。
C/C++ Qt 自定义Dialog对话框组件应用 在上一篇博文 `《C/C++ Qt 标准Dialog对话框组件应用》` 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能。