Qt Dialog

本文详细介绍了Qt中的Dialog类,包括其父类QWidget和各种子类,如QInputDialog、QFileDialog等。着重讲解了QInputDialog的成员变量、成员函数以及如何使用。示例代码展示了如何获取QInputDialog的文本信息、选择项、整数和浮点数值。此外,还提到了QFileDialog用于打开文件夹的功能及其使用方法。
摘要由CSDN通过智能技术生成

一、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::get

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值