Qt Dialog

一、Dialog的父類和子類
1、父類:QWidget
2、子類:
 QAbstractPrintDialog,
QColorDialog,
QErrorMessage,
QFileDialog,
QFontDialog,
QInputDialog,
QMessageBox,
QPageSetupDialog,
QPrintPreviewDialog,
QProgressDialog,
and QWizard.

3、繼承的均爲標準對話框。
包括用於打印的QAbstractPrintDialog,用於設置顏色的QColorDialog,用於報錯的QErrorMessage,用於打開、保存的QFileDialog, 用於設置
字體的QFontDialog,用於輸入數據的QInputDialog等等,這裏就不再一一介紹了。
二、我們來看看QInputDialog的成員變量和成員函數

公有成員(Public Types)
enum InputDialogOption { NoButtons,UseListViewForComboBoxItems }
flags InputDialogOptions
enum InputMode { TextInput, IntInput, DoubleInput}

受保護成員(Properties)
cancelButtonText : QString
comboBoxEditable : bool
comboBoxItems : QStringList
doubleDecimals : int
doubleMaximum : double
doubleMinimum : double
doubleValue : int
inputMode : InputMode
intMaximum : int
intMinimum : int
intStep : int
intValue : int
labelText : QString
okButtonText : QString
options : InputDialogOptions
textEchoMode : QLineEdit::EchoMode
textValue : QString
注:
2 properties inherited from QDialog
58 properties inherited from QWidget
1 property inherited from QObject

公有成員函數(Public Functions)
QInputDialog ( QWidget * parent = 0, Qt::WindowFlags flags = 0)
~QInputDialog ()
QString cancelButtonText () const
QStringList comboBoxItems () const
int doubleDecimals () const
double doubleMaximum () const
double doubleMinimum () const
double doubleValue () const
InputMode inputMode () const
int intMaximum () const
int intMinimum () const
int intStep () const
int intValue () const
bool isComboBoxEditable () const
QString labelText () const
QString okButtonText () const
void open ( QObject * receiver, const char *member )
InputDialogOptions options () const
void setCancelButtonText ( const QString& text )
void setComboBoxEditable ( bool editable )
void setComboBoxItems ( const QStringList& items )
void setDoubleDecimals ( int decimals )
void setDoubleMaximum ( double max )
void setDoubleMinimum ( double min )
void setDoubleRange ( double min, double max)
void setDoubleValue ( double value )
void setInputMode ( InputMode mode )
void setIntMaximum ( int max )
void setIntMinimum ( int min )
void setIntRange ( int min, int max )
void setIntStep ( int step )
void setIntValue ( int value )
void setLabelText ( const QString& text )
void setOkButtonText ( const QString& text )
void setOption ( InputDialogOption option, bool on= true )
void setOptions ( InputDialogOptions options)
void setTextEchoMode ( QLineEdit::EchoMode mode)
void setTextValue ( const QString& text )
bool testOption ( InputDialogOption option )const
QLineEdit::EchoMode textEchoMode () const
QString textValue () const

重用的公有成員函數(Reimplemented Public Functions)
virtual void done ( int result )
virtual QSize minimumSizeHint () const
virtual void setVisible ( bool visible )
virtual QSize sizeHint () const
注:
8 public functions inherited from QDialog
217 public functions inherited from QWidget
29 public functions inherited from QObject
13 public functions inherited from QPaintDevice

私有信號函數(Signals)
void doubleValueChanged ( double value )
void doubleValueSelected ( double value )
void intValueChanged ( int value )
void intValueSelected ( int value )
void textValueChanged ( const QString& text )
void textValueSelected ( const QString& text )
注:
3 signals inherited from QDialog
1 signal inherited from QWidget
1 signal inherited from QObject

靜態公有成員函數(Static Public Members)
double getDouble ( QWidget * parent, const QString& title, const QString & label,double value = 0, double min = -2147483647, double max =2147483647, int decimals = 1, bool * ok = 0, Qt::WindowFlags flags= 0 )
int getInt ( QWidget * parent, const QString& title, const QString & label, intvalue = 0, int min = -2147483647, int max = 2147483647, int step =1, bool * ok = 0, Qt::WindowFlags flags = 0 )
QString getItem ( QWidget * parent, const QString& title, const QString & label,const QStringList & items, int current = 0, booleditable = true, bool * ok = 0, Qt::WindowFlags flags = 0 )
QString getText ( QWidget * parent, const QString& title, const QString & label,QLineEdit::EchoMode mode = QLineEdit::Normal, const QString& text = QString(), bool * ok = 0, Qt::WindowFlagsflags = 0 )
注:
4 static public members inherited from QWidget
5 static public members inherited from QObject

示例1:爲了更好的知道部分設置函數,我們編寫了一個空工程,只有main.cpp文件的工程,其中mian函數裏是這樣的:
#include <QApplication>
#include <QDialog>
#include <QCursor>
#include <QTextCodec>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QDialog*dialog = new QDialog;
   dialog->setCursor(Qt::PointingHandCursor);
   dialog->setWindowTitle("liuhong");

   //dialog->resize(200,300);
   dialog->setMinimumSize(100,50);
   dialog->setFixedSize(200,100);
   dialog->setMaximumSize(400,300);

   dialog->show();
    return app.exec();
 }

其中設置了Dialog的光標,窗口標題,最大最小和出現時的窗口大小。
三、我們來看看Dialog的子類
1、標準對話框之QInputDialog

示例2:獲得QInputDialog的文本信息。
#include <QApplication>
#include <QDir>
#include <QInputDialog>
#include <QTextCodec>
#include <QDebug>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QInputDialog*dialog = new QInputDialog;
    boolok;
    QString text= QInputDialog::getText(dialog,QObject::tr("QInputDialog::getText()"),
                                        QObject::tr("User name:"), QLineEdit::Normal,
                                            QDir::home().dirName(), &ok);
    if (ok&&!text.isEmpty()) qDebug()<<text;
    deletedialog;
    returnapp.exec();
 }

使用時:
    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);


其他三個就不一一示例,列舉它們的用法了。
給出它們使用時:

獲得item:
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);

獲得int值:
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));

獲得double值:
 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));

如果是我們要單獨研究的話,我們可以:
示例3:
#include <QApplication>
#include <QDir>
#include <QInputDialog>
#include <QTextCodec>
#include <QDebug>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QInputDialog*dialog = new QInputDialog;
   dialog->setInputMode(QInputDialog::DoubleInput);
   dialog->setDoubleValue(90.00);
   dialog->setDoubleRange(10,100);
   
   dialog->show();
    returnapp.exec();
 }

2、標準對話框之QFileDialog
示例4:打開文件夾,返回文件夾的dir(目錄)。
#include <QApplication>
#include <QDir>
#include <QTextCodec>
#include <QDebug>
#include <QFileDialog>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QFileDialog*dialog = new QFileDialog;
    QString dir= QFileDialog::getExistingDirectory(dialog, QObject::tr("OpenDirectory"),
                                                    "/home",
                                                    QFileDialog::ShowDirsOnly
                                                    | QFileDialog::DontResolveSymlinks);
   
   qDebug()<<dir;
    returnapp.exec();
 }

這裏getExistingDirectory函數有四個參數,第一個是窗體指針對象,第二個是窗體title,第三個是dir(目錄),第四個是options(或是option)。

看了這個示例之後我們來看看它的成員:
公有成員(Public Types)
enum AcceptMode { AcceptOpen, AcceptSave }
enum DialogLabel { LookIn, FileName, FileType,Accept, Reject }
enum FileMode { AnyFile, ExistingFile, Directory,ExistingFiles, DirectoryOnly }
typedef Mode
enum Option { ShowDirsOnly, DontResolveSymlinks,DontConfirmOverwrite, DontUseNativeDialog, ..., DontUseSheet}
flags Options
enum ViewMode { Detail, List }

私有成員(Properties)
acceptMode : AcceptMode
defaultSuffix : QString
fileMode : FileMode
options : Options
viewMode : ViewMode
注:
2 properties inherited from QDialog
58 properties inherited from QWidget
1 property inherited from QObject

公共成員函數(Public Functions)
QFileDialog ( QWidget * parent, Qt::WindowFlags flags )
QFileDialog ( QWidget * parent = 0, const QString &caption = QString(), const QString & directory =QString(), const QString & filter = QString())
~QFileDialog ()
AcceptMode acceptMode () const
bool confirmOverwrite () const
QString defaultSuffix () const
QDir directory () const
FileMode fileMode () const
QDir::Filters filter () const
QStringList history () const
QFileIconProvider * iconProvider () const
bool isNameFilterDetailsVisible () const
bool isReadOnly () const
QAbstractItemDelegate * itemDelegate ()const
QString labelText ( DialogLabel label )const
QStringList nameFilters () const
void open ( QObject * receiver, const char *member )
Options options () const
QAbstractProxyModel * proxyModel () const
bool resolveSymlinks () const
bool restoreState ( const QByteArray& state )
QByteArray saveState () const
void selectFile ( const QString &filename )
void selectNameFilter ( const QString& filter )
QStringList selectedFiles () const
QString selectedNameFilter () const
void setAcceptMode ( AcceptMode mode )
void setConfirmOverwrite ( bool enabled )
void setDefaultSuffix ( const QString& suffix )
void setDirectory ( const QString& directory )
void setDirectory ( const QDir &directory )
void setFileMode ( FileMode mode )
void setFilter ( QDir::Filters filters )
void setHistory ( const QStringList& paths )
void setIconProvider ( QFileIconProvider *provider )
void setItemDelegate ( QAbstractItemDelegate *delegate )
void setLabelText ( DialogLabel label, constQString & text )
void setNameFilter ( const QString& filter )
void setNameFilterDetailsVisible ( bool enabled)
void setNameFilters ( const QStringList& filters )
void setOption ( Option option, bool on = true)
void setOptions ( Options options )
void setProxyModel ( QAbstractProxyModel *proxyModel )
void setReadOnly ( bool enabled )
void setResolveSymlinks ( bool enabled )
void setSidebarUrls ( constQList<QUrl> & urls)
void setViewMode ( ViewMode mode )
QList<QUrl> sidebarUrls() const
bool testOption ( Option option ) const
ViewMode viewMode () const
Reimplemented Public Functions
virtual void setVisible ( bool visible )
注:
8 public functions inherited from QDialog
217 public functions inherited from QWidget
29 public functions inherited from QObject
13 public functions inherited from QPaintDevice

信號函數(Signals)
void currentChanged ( const QString& path )
void directoryEntered ( const QString& directory )
void fileSelected ( const QString& file )
void filesSelected ( const QStringList& selected )
void filterSelected ( const QString& filter )
注:
3 signals inherited from QDialog
1 signal inherited from QWidget
1 signal inherited from QObject

靜態公有成員函數(Static Public Members)
QString getExistingDirectory ( QWidget * parent =0, const QString & caption = QString(), constQString & dir = QString(), Options options =ShowDirsOnly )
QString getOpenFileName ( QWidget * parent = 0,const QString & caption = QString(), const QString& dir = QString(), const QString &filter = QString(), QString * selectedFilter = 0, Options options =0 )
QStringList getOpenFileNames ( QWidget * parent =0, const QString & caption = QString(), constQString & dir = QString(), const QString& filter = QString(), QString * selectedFilter = 0,Options options = 0 )
QString getSaveFileName ( QWidget * parent = 0,const QString & caption = QString(), const QString& dir = QString(), const QString &filter = QString(), QString * selectedFilter = 0, Options options =0 )
注:
4 static public members inherited from QWidget
5 static public members inherited from QObject

重用保護成員函數(Reimplemented Protected Functions)
virtual void accept ()
virtual void changeEvent ( QEvent * e )
virtual void done ( int result )
注:
7 protected functions inherited from QDialog
37 protected functions inherited from QWidget
7 protected functions inherited from QObject
1 protected function inherited from QPaintDevice

我們可以看到option和options
enum Option { ShowDirsOnly, DontResolveSymlinks,DontConfirmOverwrite, DontUseNativeDialog, ReadOnly,HideNameFilterDetails,DontUseSheet }
flags Options
看它的英文組成,我們應該就能知道它們分別有什麼用處了。

示例5:打開文件,返回文件dir(目錄)
#include <QApplication>
#include <QDir>
#include <QTextCodec>
#include <QDebug>
#include <QFileDialog>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QFileDialog*dialog = new QFileDialog;
   QFileDialog::Options options;
   options|=QFileDialog::DontUseNativeDialog;
    QStringselectedFilter;
    QStringfileName = QFileDialog::getOpenFileName(dialog,
                                                   QObject::tr("QFileDialog::getSaveFileName()"),
                                   "",
                                   QObject::tr("All Files (*);;Text Files (*.txt)"),
                                   &selectedFilter,
                                   options);
   qDebug()<<fileName;
   dialog->show();
    returnapp.exec();
 }
注:
這裏多了兩個參數filter和selectedFilter。
這個函數的後兩個參數可以不用設置(即只需四個參數)。
filter(過濾器)
設置方式有兩種:
QObject::tr("Image Files (*.png *.jpg *.bmp)");//設置一個過濾器
QObject::tr("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XMLfiles (*.xml)");//設置多個過濾器

打開多個文件夾就不示例了(函數getOpenFileNames)
只是返回的是QStringList。

示例6:保存文件
#include <QApplication>
#include <QDir>
#include <QTextCodec>
#include <QDebug>
#include <QFileDialog>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QFileDialog*dialog = new QFileDialog;
   QFileDialog::Options options;
   options|=QFileDialog::DontUseNativeDialog;
    QStringselectedFilter;
    QStringfileName = QFileDialog::getSaveFileName(dialog,
                                                   QObject::tr("QFileDialog::getSaveFileName()"),
                                   "",
                                   QObject::tr("All Files (*);;Text Files (*.txt)"),
                                   &selectedFilter,
                                   options);
   qDebug()<<fileName;
   dialog->show();
    returnapp.exec();
 }


3、標準對話框之QColorDialog
示例7:設置lable顏色
void Dialog::setColor()
{
    QColorcolor;
    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);
    }
}
注:這是Qt Domo中的一個範例。
示例8:自己給出的設置顏色的程序。
#include <QApplication>
#include <QColor>
#include <QTextCodec>
#include <QDebug>
#include <QColorDialog>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QColorDialog*dialog = new QColorDialog;
    QColorcolor;
    color =QColorDialog::getColor(Qt::green, dialog, "Select Color",QColorDialog::DontUseNativeDialog);
   dialog->setPalette(QPalette(color));
   dialog->show();
    returnapp.exec();
 }

4、標準對話框之QFontDialog
示例9:字體對話框
#include <QApplication>
#include <QColor>
#include <QTextCodec>
#include <QDebug>
#include <QFontDialog>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QFontDialog*dialog = new QFontDialog;
    boolok;
    QFont font =QFontDialog::getFont(&ok, QFont("Times", 12),
                                     dialog);

   dialog->setFont(font);
   qDebug()<<font.key();

   dialog->show();
    returnapp.exec();
 }


5、標準對話框之QMessageBox
示例10:警告對話框
#define MESSAGE \
   QObject::tr("<p>Message boxes have acaption, a text, " \
              "and any number of buttons, each with standard or custom texts."\
              "<p>Click a button to close themessage box. Pressing the Esc button " \
              "will activate the detected escape button (if any).")
#include <QApplication>
#include <QTextCodec>
#include <QDebug>
#include <QMessageBox>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QMessageBoxdialog;
   QMessageBox::StandardButton reply;
    reply =QMessageBox::critical(&dialog,QObject::tr("QMessageBox::critical()"),
                                       MESSAGE,
                                       QMessageBox::Abort | QMessageBox::Retry |QMessageBox::Ignore);
       if (reply == QMessageBox::Abort)
           qDebug()<<"Abort";
       else if (reply == QMessageBox::Retry)
           qDebug()<<"Retry";
       else
           qDebug()<<"Ignore";
    returnapp.exec();
 }

示例11:信息對話框
#define MESSAGE \
   QObject::tr("<p>Message boxes have acaption, a text, " \
              "and any number of buttons, each with standard or custom texts."\
              "<p>Click a button to close themessage box. Pressing the Esc button " \
              "will activate the detected escape button (if any).")
#include <QApplication>
#include <QTextCodec>
#include <QDebug>
#include <QMessageBox>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QMessageBoxdialog;
   QMessageBox::StandardButton reply;
    reply =QMessageBox::information(&dialog,QObject::tr("QMessageBox::critical()"),
                                       MESSAGE);
    if (reply ==QMessageBox::OK)
          qDebug()<<"OK";
    else
          qDebug()<<"Escape"
    returnapp.exec();
 }

示例12:詢問對話框
#define MESSAGE \
   QObject::tr("<p>Message boxes have acaption, a text, " \
              "and any number of buttons, each with standard or custom texts."\
              "<p>Click a button to close themessage box. Pressing the Esc button " \
              "will activate the detected escape button (if any).")
#include <QApplication>
#include <QTextCodec>
#include <QDebug>
#include <QMessageBox>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QMessageBoxdialog;
   QMessageBox::StandardButton reply;
    reply =QMessageBox::question(&dialog,QObject::tr("QMessageBox::critical()"),
                                       MESSAGE,QMessageBox::Yes | QMessageBox::No |QMessageBox::Cancel);
    if (reply ==QMessageBox::Yes)
              qDebug()<<"Yes";
    elseif(reply == QMessageBox::No)
              qDebug()<<"No";
    else
              qDebug()<<"Cancel";
    returnapp.exec();
 }
示例13:一般警告對話框
#define MESSAGE \
   QObject::tr("<p>Message boxes have acaption, a text, " \
              "and any number of buttons, each with standard or custom texts."\
              "<p>Click a button to close themessage box. Pressing the Esc button " \
              "will activate the detected escape button (if any).")
#include <QApplication>
#include <QTextCodec>
#include <QDebug>
#include <QMessageBox>
int main(int argc, char *argv[])
 {
   QApplication  app(argc, argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QMessageBoxdialog;
    QMessageBoxmsgBox(QMessageBox::Warning,QObject::tr("QMessageBox::warning()"),
                          MESSAGE, 0, &dialog);
   msgBox.addButton(QObject::tr("Save &Again"),QMessageBox::AcceptRole);
   msgBox.addButton(QObject::tr("&Continue"),QMessageBox::RejectRole);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章