我的QT Creator學習筆記(七)——標準對話框

    Qt提供了一些常用的對話框類型,他們全部繼承自QDialog類,並增加了自己的特色功能,比如獲取顏色、顯示特定信息等。

新建Qt Widgets應用,在其ui設計模式中添加一些按鈕,然後實現點擊不同按鈕顯示不同對話的演示。

 

1、顏色對話框

     顏色對話框類QColorDialog提供了一個可以獲取指定顏色的對話框部件。

    轉到“顏色對話框”的單機信號槽,修改代碼如下(記得要包含<QDebug>和<QColorDialog>)

void MyWidget::on_pushButton_clicked()
{
    QColor color=QColorDialog::getColor(Qt::red,this,"color dialog");
    qDebug()<<"color"<<color;

}

        這裏使用了QColorDialog的靜態函數getColor來獲取顏色,它的3個參數,分別是:設置初始顏色、指定父窗口和設置對話框標題

點擊“顏色對話框”,彈出如下對話框

           選擇黑色點擊OK後,輸出信息color QColor(ARGB 1, 0, 0, 0)。4個值分別代表透明度(alpha)、紅色(red)、綠色(green)、藍色(blue)。

        在getColor函數中還可以使用最後一個參數添加對alpha的設置,代碼如下

QColor color=QColorDialog::getColor(Qt::red,this,tr("color dialog"),QColorDialog::ShowAlphaChannel);

        前面使用了QColorDialog的靜態函數來直接顯示顏色對話框,也可以先創建對象,再設置各項參數,代碼如下,效果都是一樣的。第一種方法代碼更簡潔,第二種方法使用更靈活。

void MyWidget::on_pushButton_clicked()
{
    QColorDialog colorDlg(Qt::red,this);
    colorDlg.setOption(QColorDialog::ShowAlphaChannel);
    colorDlg.exec();
    QColor color=colorDlg.currentColor();
    qDebug()<<"color"<<color;

}

2、文件對話框

  文件對話框類QFileDialog類提供了一個允許用戶選擇文件或文件夾的對話框。

  轉到“文件對話框”按鈕的單擊信號槽修,改代碼如下

void MyWidget::on_pushButton_5_clicked()
{
    QString fileName=QFileDialog::getOpenFileName(this,"file dialog","D:","picture(*png *jpg)");
    qDebug()<<"fileName"<<fileName;
}

        這裏使用了QFileDialog的靜態函數getOpenFileName來獲取選擇的文件名,這個函數會以模態形式運行一個文件對話框。它的4個參數分別是:指定父窗口、設置對話框標題、指定默認打開路徑和設置文件類型過濾器。

點擊“顏色對話框”按鈕,彈出如下對話框。

選擇某個文件後,輸出信息如下

fileName "D:/fundrive/mapbarengin/dmax/images/map/camera_icons/s_10.png"。

 

3、字體對話框

字體對話框QFontDialog類提供了一個可以選擇字體的對話框部件。

轉到“字體對話框”按鈕的單擊信號槽,修改代碼如下

void MyWidget::on_pushButton_2_clicked()
{
    bool ok;
    QFont font=QFontDialog::getFont(&ok,this);
    //如果單擊OK按鈕,讓“字體對話框”按鈕使用新字體
    //如果單擊Cancel按鈕,那麼輸出信息。
    if(ok)
        ui->pushButton_2->setFont(font);
    else
        qDebug()<<"unselect font";
}

        這裏使用了QFontDialog的getFont()靜態函數來獲取選擇的字體。這個函數的第一個參數用來存放按下的按鈕狀態,true-ok,false-cancel。

   單擊“字體對話框”按鈕彈出如下對話框

4、輸入對話框

      輸入對話框QInputDialog類用來提供一個對話框,可以讓用戶輸入一個單一的值或字符串。

     轉到“字體對話框”按鈕的單擊信號槽,修改代碼如下

void MyWidget::on_pushButton_6_clicked()
{
    bool ok;
    //獲取字符串
    QString string=QInputDialog::getText(this,"input string dialog",
                                           "input user name:",QLineEdit::Normal,"admin",&ok);
    if(ok)
        qDebug()<<"string:"<<string;
    //獲取整數
    int value=QInputDialog::getInt(this,"input integer dialog",
                                   "please input int from -1000 to 1000",100,-1000,1000,10,&ok);
    if(ok)
         qDebug()<<"value:"<<value;
    //獲取浮點數
    double value2=QInputDialog::getDouble(this,"input double dialog","please input double form -1000 to 1000",
                                          0.00,-1000,1000,2,&ok);
    if(ok)
        qDebug()<<"value2:"<<value2;

    QStringList items;
    items<<"itme1"<<"itme2";
    //獲取條目
    QString item=QInputDialog::getItem(this,"input item dialog",
                                       "please input or chose a item",items,0,true,&ok);
    if(ok)
        qDebug()<<"item:"<<item;

}

       這裏一個創建了4個不同類型的輸入對話框,也就是使用了4個靜態函數。1、getText函數可以提供一個可輸入字符串的對話框,個參數的作用分別是: 指定父窗口、設置窗口標題、設置對話框中的標籤顯示文本、設置輸入字符串的顯示模式、設置默認字符串和獲取按下按鈕信息的布爾變量。2、getInt函數可以提供一個輸入整型數值的對話框,其參數依次爲:指定父窗口、設置窗口標題、設置對話框中的標籤顯示文本、設置默認數值、設置最小輸入數值、設置最大輸入數值、設置使用箭頭時,每次按下數值變化
步長和獲取按下按鈕信息的布爾變量。3、getDouble提供輸入浮點型的對話框,其參數與getInt類似。4、getItem提供一個可以輸入條目的對話框,需要先給它提供一些條目如這裏的items,另外參數0表示默認顯示列表中的第0條,true表示可以被更改。

 

  5、消息對話框

    消息對話框QMessageBox類提供了一個模態的對話框來通知用戶一些信息,或者向用戶提出一個問題,並且獲取答案。

   轉到“消息對話框”按鈕的單擊信號槽,修改代碼如下

void MyWidget::on_pushButton_3_clicked()
{
    //quesition dialog
    int ret1=QMessageBox::question(this,"quesition dialog","Do you know qt?",QMessageBox::Yes,QMessageBox::No);
    if(ret1==QMessageBox::Yes)
        qDebug()<<"Qusition Yes";
    //inform dialog
    int ret2=QMessageBox::information(this,"infomation dialog","this is qt creator book!",QMessageBox::Ok);
    if(ret2==QMessageBox::Ok)
        qDebug()<<"information dialog ok";
    //warning dialog
    int ret3=QMessageBox::warning(this,"warning dialog","can not end now",QMessageBox::Abort);
    if(ret3==QMessageBox::Abort)
        qDebug()<<"warning dialog";
    //error dialog
    int ret4=QMessageBox::critical(this,"critical dialog","There is an error,please restart",QMessageBox::YesAll);
    if(ret4==QMessageBox::YesAll)
        qDebug()<<"error";
    //about dialog
    QMessageBox::about(this,"ABout dialog","Qt creator");
}

這裏創建了4個不同類型的消息對話框,幾個參數分別用於設置父窗口、標題欄、顯示信息和擁有哪些標準按鈕。返回值就是那些標準按鈕。about沒有返回值,因爲它默認只有一個按鈕。運行效果如下

6、進度對話框

     進度對話框QProgressDialog對一個耗時較長的操作的進度提供了反饋。

     轉到“進度對話框”按鈕的單擊槽,修改代碼如下。

void MyWidget::on_pushButton_7_clicked()
{
    QProgressDialog dialog("copy file ......","cancel",0,5000,this);
    dialog.setWindowTitle("progress dialog");
    dialog.setWindowModality(Qt::WindowModal);
    dialog.show();
    for(int i=0;i<=5000;i++)
    {
        dialog.setValue(i);
        QCoreApplication::processEvents();//避免界面冷凍
        if(dialog.wasCanceled())
            break;
    }
    qDebug()<<"copy file finished";
}

   這裏首先創建了一個progressDialog 對話框的類對象dialog,構造函數的參數分別用於設置對話框的標籤內容、取消按鍵的顯示文本、最小值、最大值、父窗口。for循環模擬文件複製,setValue函數使得進度條向前推進。wasCanceled函數用來判斷是否按下了cancel按鍵。運行效果如下

7、錯誤信息對話框

    錯誤信息對話框QErrorMessage提供了一個顯示錯誤信息的對話框。

    首先在widget的頭文件裏添加類的前置聲明 ,並添加QErrorMessage類型的私有成員變量

   

class QErrorMessage;

 

QErrorMessage* errordlg;

     轉到“錯誤信息對話框”的單擊槽,修改代碼如下

void MyWidget::on_pushButton_4_clicked()
{
    errordlg->setWindowTitle("error dlg");
    errordlg->showMessage("this is  error info");
}

      showMessage函數會以模態對話框的信息顯示錯誤信息。這裏之所以使用成員變量,而不是在槽函數裏創建一個臨時對話框,是因爲錯誤信息對話框默認有一個“show this message again"複選框,可以選擇以後是否還要顯示相同錯誤信息。用臨時對話框的話框,這個複選框起不到作用。

     運行效果如下

 

8、嚮導對話框

  嚮導對話框QWizard類提供了一個設計嚮導界面的框架。

  添加三個返回值爲QWizardPage類對象的指針函數,其實現代碼如下

QWizardPage* MyWidget::createPage1()//嚮導頁面1
{
    QWizardPage* page=new QWizardPage;
    page->setTitle("introduce");
    return page;
}

QWizardPage* MyWidget::createPage2()//嚮導頁面2
{
    QWizardPage* page=new QWizardPage;
    page->setTitle("user choice information");
    return page;
}

QWizardPage* MyWidget::createPage3()//嚮導頁面3
{
    QWizardPage* page=new QWizardPage;
    page->setTitle("finished");
    return page;
}

轉到“嚮導對話框”按鈕的單擊槽,修改代碼如下

void MyWidget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle("wizard dialog");
    wizard.addPage(createPage1());
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

     這裏新建了QWizard類對象,然後使用addPage()函數爲其增加了3個頁面。

 

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