国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框

這篇具有很好參考價(jià)值的文章主要介紹了06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在一個(gè)完整的應(yīng)用程序設(shè)計(jì)中,不可避免地會(huì)涉及多個(gè)窗體、對(duì)話框的設(shè)計(jì)和調(diào)用,如何設(shè)計(jì)和調(diào)用這些對(duì)話框和窗體是搞清楚一個(gè)龐大的應(yīng)用程序設(shè)計(jì)的基礎(chǔ)。本章將介紹對(duì)話框和多窗體設(shè)計(jì)、調(diào)用方式、數(shù)據(jù)傳遞等問(wèn)題,主要包括以下幾點(diǎn)。

  • Qt 提供的標(biāo)準(zhǔn)對(duì)話框的使用,如打開文件對(duì)話框、選擇顏色對(duì)話框、字體對(duì)話框、消息 提示和確認(rèn)選擇對(duì)話框
  • 自定義對(duì)話框的設(shè)計(jì)和調(diào)用,如何獲取返回值,在對(duì)話框中如何操作主窗體等。
  • 在一個(gè)應(yīng)用程序中如何設(shè)計(jì)多種窗體,基于 QDialog、QWidget 和 QMainWindow 創(chuàng)建的窗體的調(diào)用方式有哪些,它們之間有什么區(qū)別。
  • 如何創(chuàng)建一個(gè)在多頁(yè)組件中管理的多窗體應(yīng)用,類似于現(xiàn)在流行的多頁(yè)瀏覽器的界面效果,子窗體如何與主窗體實(shí)現(xiàn)交互。
  • 如何創(chuàng)建MDI(Multi-document interface)應(yīng)用程序。
  • 如何創(chuàng)建一個(gè)帶有啟動(dòng)界面(Splash)和登錄界面的窗體,如何保存和讀取應(yīng)用程序設(shè)置的參數(shù)

1. 標(biāo)準(zhǔn)對(duì)話框概述

**Qt為應(yīng)用程序設(shè)計(jì)提供了一些常用的標(biāo)準(zhǔn)對(duì)話框,如打開文件對(duì)話框、選擇顏色對(duì)話框、信息提示和確認(rèn)選擇對(duì)話框、標(biāo)準(zhǔn)輸入對(duì)話框等,用戶無(wú)需再自己設(shè)計(jì)這些常用的對(duì)話框,這樣可以減少程序設(shè)計(jì)工作量。**在前面幾章的實(shí)例中,或多或少地用到了其中的一些對(duì)話框。

Qt 預(yù)定義的各標(biāo)準(zhǔn)對(duì)話框的類,及其主要靜態(tài)函數(shù)的功能見表 6-1(由于輸入?yún)?shù)一般較多,省略了函數(shù)的輸入?yún)?shù),只列出了函數(shù)的返回值類型)。

06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++
06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++

實(shí)例 samp6_1 演示使用這些對(duì)話框,程序運(yùn)行界面如圖6-1 所示。下方的文本框顯示打開文件的文件名或一些提示信息,某些對(duì)話框的輸入結(jié)果可應(yīng)用于文本框的屬性設(shè)置,如字體和顏色。
06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++

2. QFileDialog 對(duì)話框

2.1 選擇打開一個(gè)文件

若要打開一個(gè)文件,可調(diào)用靜態(tài)函數(shù) QFileDialog::getOpenFileName(),“打開一個(gè)文件”按鈕的響應(yīng)代碼如下:

void Dialog::on_btnOpen_clicked()
{ //選擇單個(gè)文件
    QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
//  QString  curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
    QString dlgTitle="選擇一個(gè)文件"; //對(duì)話框標(biāo)題
    QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器

    QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);

    if (!aFileName.isEmpty())
        ui->plainTextEdit->appendPlainText(aFileName);
}

QFileDialog::getOpenFileName()函數(shù)需要傳遞 3個(gè)字符串型參數(shù),分別如下。
對(duì)話框標(biāo)題,這里設(shè)置為"選擇一個(gè)文件”。
初始化目錄,打開對(duì)話框時(shí)的初始目錄,這里用 QDir::currentPath()獲取應(yīng)用程序當(dāng)前目錄。

文件過(guò)濾器,設(shè)置選擇不同后綴的文件,可以設(shè)置多組文件,如:

QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器

每組文件之間用兩個(gè)分號(hào)隔開,同一組內(nèi)不同后綴之間用空格隔開。

QFileDialog ::getOpenFileName()函數(shù)返回的是選擇文件的帶路徑的完整文件名,如果在對(duì)話框里取消選擇,則返回字符串為空。

2.2 選擇打開多個(gè)文件

若要選擇打開多個(gè)文件,可使用靜態(tài)函數(shù)QFileDialog::getOpenFileNames(),“打開多個(gè)文件"按鈕的響應(yīng)代碼如下:

void Dialog::on_btnOpenMulti_clicked()
{ //選擇多個(gè)文件
//  QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
    QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
    QString dlgTitle="選擇多個(gè)文件"; //對(duì)話框標(biāo)題
    QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器

    QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
    for (int i=0; i<fileList.count();i++)
        ui->plainTextEdit->appendPlainText(fileList.at(i));
}

getOpenFileNames()函數(shù)的傳遞參數(shù)與 getOpenFileName()一樣,只是返回值是一個(gè)字符串列表,列表的每一行是選擇的一個(gè)文件。

2.3 選擇已有目錄

選擇已有目錄可調(diào)用靜態(tài)函數(shù) QFileDialog::getExistingDirectory(),同樣,若需要傳遞對(duì)話框標(biāo)題和初始路徑,還應(yīng)傳遞一個(gè)選項(xiàng),一般用 QFileDialog::ShowDirsOnly,表示對(duì)話框中只顯示目錄。

void Dialog::on_btnSelDir_clicked()
{ //選擇文件夾
    QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
//  QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
//調(diào)用打開文件對(duì)話框打開一個(gè)文件

    QString dlgTitle="選擇一個(gè)目錄"; //對(duì)話框標(biāo)題
    QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
    if (!selectedDir.isEmpty())
        ui->plainTextEdit->appendPlainText(selectedDir);
}

靜態(tài)函數(shù) QCoreApplication::applicationDirPath()返回應(yīng)用程序可執(zhí)行文件所在的目錄,getExistingDirectory()函數(shù)的返回值是選擇的目錄名稱字符串。

2.4 選擇保存文件名

選擇一個(gè)保存文件,使用靜態(tài)函數(shù) QFileDialog::getSaveFileName(),傳遞的參數(shù)與 getOpenFileName()函數(shù)相同。只是在調(diào)用 getSaveFileName()函數(shù)時(shí),若選擇的是一個(gè)已經(jīng)存在的文件,會(huì)提示是否覆蓋原有的文件。如果提示覆蓋,會(huì)返回為選擇的文件,但是并不會(huì)對(duì)文件進(jìn)行實(shí)質(zhì)操作,對(duì)文件的刪除操作需要在選擇文件之后自己編碼實(shí)現(xiàn)。如下面的代碼,即使選擇覆蓋文件,由于代碼里沒(méi)有實(shí)質(zhì)地覆蓋原來(lái)的文件,也不會(huì)對(duì)選擇的文件造成任何影響。

void Dialog::on_btnSave_clicked()
{//保存文件
    QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
    QString dlgTitle="保存文件"; //對(duì)話框標(biāo)題
    QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; //文件過(guò)濾器
    QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
    if (!aFileName.isEmpty())
        ui->plainTextEdit->appendPlainText(aFileName);
}

3. QColorDialog 對(duì)話框

QColorDialog 是選擇顏色對(duì)話框,選擇顏色使用靜態(tài)函數(shù) QColorDialog::getColor()。下面是“選擇顏色”按鈕的代碼,它為文本框的字體選擇顏色。

void Dialog::on_btnColor_clicked()
{
    QPalette pal=ui->plainTextEdit->palette(); //獲取現(xiàn)有 palette
    QColor  iniColor=pal.color(QPalette::Text); //現(xiàn)有的文字顏色
    QColor color=QColorDialog::getColor(iniColor,this,"選擇顏色");
    if (color.isValid()) //選擇有效
    {
        pal.setColor(QPalette::Text,color); //palette 設(shè)置選擇的顏色
        ui->plainTextEdit->setPalette(pal); //設(shè)置 palette
    }
}

getColor()函數(shù)需要傳遞一個(gè)初始的顏色,這里是將 palette 提取的文本顏色作為初始顏色getColor()函數(shù)返回一個(gè)顏色變量,若在顏色對(duì)話框里取消選擇,則返回的顏色值無(wú)效,通過(guò)QColor::isValid()函數(shù)來(lái)判斷返回是否有效。

4. QFontDialog 對(duì)話框

QFontDialog 是選擇字體對(duì)話框,選擇字體使用靜態(tài)函數(shù)QFontDialog::getFont()。下面是“選擇字體”按鈕的代碼,它為文本框選擇字體,字體設(shè)置的內(nèi)容包括字體名稱、大小、粗體、斜體等。

void Dialog::on_btnFont_clicked()
{//選擇字體
    QFont iniFont=ui->plainTextEdit->font(); //獲取文本框的字體
    bool   ok=false;
    QFont font=QFontDialog::getFont(&ok,iniFont); //選擇字體
    if (ok) //選擇有效
        ui->plainTextEdit->setFont(font);
}

gctFont()返回一個(gè)字體變量,但是 QFont 沒(méi)有類似于 isValid()的函數(shù)來(lái)判斷有效性,所以在調(diào)用 getFont()函數(shù)時(shí)以引用方式傳遞一個(gè)邏輯變量 ok,調(diào)用后通過(guò)判斷 ok 是否為 true 來(lái)判斷字體選擇是否有效。

5. QInputDialog 標(biāo)準(zhǔn)輸入對(duì)話框

QImputDialog 有單行字符串輸入、整數(shù)輸入、浮點(diǎn)數(shù)輸入、列表框選擇輸入和多行文本等多種輸入方式,圖 6-2 是其中 4 種界面效果。

06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++

5.1 輸入文字

QInputDialog::getText()函數(shù)顯示一個(gè)對(duì)話框用于輸入字符串,傳遞的參數(shù)包括對(duì)話框標(biāo)題、提示標(biāo)簽文字、缺省輸入、編輯框響應(yīng)模式等。

其中編輯框響應(yīng)模式是枚舉類型 QLineEdit::EchoMode,它控制編輯框上文字的顯示方式,正常情況下選擇QLineEdit::Normal; 如果是輸入密碼,選擇QLineEdit::Password。代碼如下:

void Dialog::on_btnInputString_clicked()
{ //輸入字符串
    QString dlgTitle="輸入文字對(duì)話框";
    QString txtLabel="請(qǐng)輸入文件名";
    QString defaultInput="新建文件.txt";
    QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常文字輸入
//    QLineEdit::EchoMode echoMode=QLineEdit::Password;//密碼輸入

    bool ok=false;
    QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);
    if (ok && !text.isEmpty())
        ui->plainTextEdit->appendPlainText(text);
}

5.2 輸入整數(shù)

使用QInputDialog::getInt()函數(shù)輸入一個(gè)整數(shù),下面的代碼為文本選擇字體大小。

void Dialog::on_btnInputInt_clicked()
{//輸入整數(shù)
    QString dlgTitle="輸入整數(shù)對(duì)話框";
    QString txtLabel="設(shè)置字體大小";
    int defaultValue=ui->plainTextEdit->font().pointSize(); //現(xiàn)有字體大小
    int minValue=6, maxValue=50,stepValue=1; //范圍,步長(zhǎng)
    bool ok=false;
    int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,
                               defaultValue, minValue,maxValue,stepValue,&ok);
    if (ok) //是否確認(rèn)輸入
    {
        QFont   font=ui->plainTextEdit->font();
        font.setPointSize(inputValue);
        ui->plainTextEdit->setFont(font);
    }
}

輸入整數(shù)對(duì)話框使用一個(gè) SpinBox 組件輸入整數(shù),getInt()需要傳遞的參數(shù)包括數(shù)值大小范圍、步長(zhǎng)、初始值,確認(rèn)選擇輸入后,將輸入的整數(shù)值作為文本框字體的大小。

5.3 輸入浮點(diǎn)數(shù)

使用QInputDialog:: getDouble ()函數(shù)輸入一個(gè)浮點(diǎn)數(shù),輸入對(duì)話框使用一個(gè)QDoubleSpinBox作為輸入組件,getDouble ()的輸入?yún)?shù)需要輸入范圍、初始值、小數(shù)點(diǎn)位數(shù)等。代碼如下:

void Dialog::on_btnInputFloat_clicked()
{ //輸入浮點(diǎn)數(shù)
    QString dlgTitle="輸入浮點(diǎn)數(shù)對(duì)話框";
    QString txtLabel="輸入一個(gè)浮點(diǎn)數(shù)";
    float defaultValue=3.13;

    float minValue=0, maxValue=10000;  //范圍
    int decimals=2;//小數(shù)點(diǎn)位數(shù)

    bool ok=false;
    float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,
                            defaultValue, minValue,maxValue,decimals,&ok);
    if (ok) //確認(rèn)選擇
    {
        QString str=QString::asprintf("輸入了一個(gè)浮點(diǎn)數(shù):%.2f",inputValue);
        ui->plainTextEdit->appendPlainText(str);
    }
}

5.4 下拉列表選擇輸入

使用QInputDialog::getItem()可以從一個(gè) ComboBox 組件的下拉列表中選擇輸入。代碼如下:

void Dialog::on_btnInputItem_clicked()
{ //條目選擇輸入
    QStringList items; //ComboBox 列表的內(nèi)容
    items <<"優(yōu)秀"<<"良好"<<"合格"<<"不合格";

    QString dlgTitle="條目選擇對(duì)話框";
    QString txtLabel="請(qǐng)選擇級(jí)別";
    int     curIndex=0; //初始選擇項(xiàng)
    bool    editable=true; //ComboBox是否可編輯
    bool    ok=false;
    QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&ok);

    if (ok && !text.isEmpty())
        ui->plainTextEdit->appendPlainText(text);
}

getItem()函數(shù)需要一個(gè)QStringList 變量為其 ComboBox 組件做條目初始化,curIndex 指明初始選擇項(xiàng),editable 表示對(duì)話框里的 ComboBox 是否可編輯,若不能編輯,則只能在下拉列表中選擇

6. QMessageBox 消息對(duì)話框

6.1 簡(jiǎn)單信息提示

消息對(duì)話框 QMessageBox 用于顯示提示、警告、錯(cuò)誤等信息,或進(jìn)行確認(rèn)選擇,由幾個(gè)靜態(tài)函數(shù)實(shí)現(xiàn)這些功能(詳見表6-1)。其中 warning()、information()、critical()和 about()這幾個(gè)函數(shù)的輸入?yún)?shù)和使用方法相同,只是信息提示的圖標(biāo)有區(qū)別。例如,warning()的函數(shù)原型是:

QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)

其中,parent 是對(duì)話框的父窗口,指定父窗口之后,打開對(duì)話框時(shí),對(duì)話框?qū)⒆詣?dòng)顯示在父窗口的上方中間位置;title 是對(duì)話框標(biāo)題字符串;text 是對(duì)話需要顯示的信息字符串;buttons 是對(duì)話框提供的按鈕,缺省只有一個(gè)OK 按鈕;defaultButton 是缺省選擇的按鈕,缺省表示沒(méi)有選擇。

warning()函數(shù)的返回結(jié)果是 StandardButton 類型。對(duì)話框上顯示的按鈕和缺省選中按鈕也是StandardButton 類型。

StandardButton 是各種按鈕的定義,如 OK、Yes、No、Cancel 等,其枚舉取值是QMessageBox::Ok、QMessageBox::Cancel、QMessageBox:Close 等,詳見Qt幫助文檔中的 StandardButton 類型的說(shuō)明。

對(duì)于 warning()、information()、critical()和 about()這幾種對(duì)話框,它們一般只有一個(gè)OK 按鈕,且無(wú)須關(guān)心對(duì)話框的返回值。所以,使用缺省的按鈕設(shè)置即可。例如,下面是程序中調(diào)用QMessageBox 信息顯示的代碼,顯示的幾個(gè)對(duì)話框如圖 6-3 所示。
06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++

void Dialog::on_btnMsgInformation_clicked()
{
    QString dlgTitle="information消息框";
    QString strInfo="文件已經(jīng)打開,字體大小已設(shè)置";

//    QMessageBox::information(this, dlgTitle, strInfo);//使用缺省的按鈕
   QMessageBox::information(this, dlgTitle, strInfo,
                              QMessageBox::Ok,QMessageBox::NoButton);
}

void Dialog::on_btnMsgWarning_clicked()
{
    QString dlgTitle="warning 消息框";
    QString strInfo="文件內(nèi)容已經(jīng)被修改";

    QMessageBox::warning(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgCritical_clicked()
{
    QString dlgTitle="critical消息框";
    QString strInfo="有不明程序訪問(wèn)網(wǎng)絡(luò)";
    QMessageBox::critical(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgAbout_clicked()
{
    QString dlgTitle="about消息框";
    QString strInfo="我開發(fā)的數(shù)據(jù)查看軟件 V1.0 \n 保留所有版權(quán)";

    QMessageBox::about(this, dlgTitle, strInfo);
}

6.2 確認(rèn)選擇對(duì)話框

QMessageBox::question()函數(shù)用于打開一個(gè)選擇對(duì)話框,提示信息,并提供 Yes、No、OK、Cancel 等按鈕,用戶單擊某個(gè)按鈕返回選擇,如常見的文件保存確認(rèn)對(duì)話框如圖 6-4 所示。
06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++

靜態(tài)函數(shù) QMessageBox::question()的原型如下:

QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)

question()對(duì)話框的關(guān)鍵是在其中可以選擇顯示多個(gè)按鈕,例如同時(shí)顯示 Yes、No、OK 或Cancel。其返回結(jié)果也是一個(gè) StandardButton 類型變量,表示哪個(gè)按鈕被單擊了。下面是產(chǎn)生如圖6-4所示對(duì)話框的代碼,并根據(jù)對(duì)話框選擇結(jié)果進(jìn)行了判斷和顯示。

void Dialog::on_btnMsgQuestion_clicked()
{
    QString dlgTitle="Question消息框";
    QString strInfo="文件已被修改,是否保存修改?";

    QMessageBox::StandardButton  defaultBtn=QMessageBox::NoButton; //缺省按鈕

    QMessageBox::StandardButton result;//返回選擇的按鈕
    result=QMessageBox::question(this, dlgTitle, strInfo,
                      QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
                      defaultBtn);

    if (result==QMessageBox::Yes)
        ui->plainTextEdit->appendPlainText("Question消息框: Yes 被選擇");
    else if(result==QMessageBox::No)
        ui->plainTextEdit->appendPlainText("Question消息框: No 被選擇");
    else if(result==QMessageBox::Cancel)
        ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被選擇");
    else
        ui->plainTextEdit->appendPlainText("Question消息框: 無(wú)選擇");
}

7. 源碼

7.1 可視化UI設(shè)計(jì)

06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框,# Qt 5.9 C++開發(fā)指南,qt,c++文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-635665.html

7.2 dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_btnOpen_clicked();

    void on_btnClearText_clicked();

    void on_btnOpenMulti_clicked();

    void on_btnSelDir_clicked();

    void on_btnSave_clicked();

    void on_btnColor_clicked();

    void on_btnFont_clicked();

    void on_btnInputString_clicked();

    void on_btnInputInt_clicked();

    void on_btnInputFloat_clicked();

    void on_btnInputItem_clicked();

    void on_btnMsgQuestion_clicked();

    void on_btnMsgInformation_clicked();

    void on_btnMsgWarning_clicked();

    void on_btnMsgCritical_clicked();

    void on_btnMsgAbout_clicked();

    void on_btnMsgAboutQt_clicked();

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

7.3 dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

#include    <QDir>
#include    <QFileDialog>
#include    <QColorDialog>
#include    <QPalette>
#include    <QFont>
#include    <QFontDialog>
#include    <QInputDialog>
#include    <QMessageBox>
#include    <QProgressDialog>


Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_btnOpen_clicked()
{ //選擇單個(gè)文件
    QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
//  QString  curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
    QString dlgTitle="選擇一個(gè)文件"; //對(duì)話框標(biāo)題
    QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器

    QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);

    if (!aFileName.isEmpty())
        ui->plainTextEdit->appendPlainText(aFileName);
}

void Dialog::on_btnClearText_clicked()
{
    ui->plainTextEdit->clear();
}

void Dialog::on_btnOpenMulti_clicked()
{ //選擇多個(gè)文件
//  QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
    QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
    QString dlgTitle="選擇多個(gè)文件"; //對(duì)話框標(biāo)題
    QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器

    QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
    for (int i=0; i<fileList.count();i++)
        ui->plainTextEdit->appendPlainText(fileList.at(i));
}

void Dialog::on_btnSelDir_clicked()
{ //選擇文件夾
    QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
//  QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
//調(diào)用打開文件對(duì)話框打開一個(gè)文件

    QString dlgTitle="選擇一個(gè)目錄"; //對(duì)話框標(biāo)題
    QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
    if (!selectedDir.isEmpty())
        ui->plainTextEdit->appendPlainText(selectedDir);
}

void Dialog::on_btnSave_clicked()
{//保存文件
    QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
    QString dlgTitle="保存文件"; //對(duì)話框標(biāo)題
    QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; //文件過(guò)濾器
    QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
    if (!aFileName.isEmpty())
        ui->plainTextEdit->appendPlainText(aFileName);
}

void Dialog::on_btnColor_clicked()
{
    QPalette pal=ui->plainTextEdit->palette(); //獲取現(xiàn)有 palette
    QColor  iniColor=pal.color(QPalette::Text); //現(xiàn)有的文字顏色
    QColor color=QColorDialog::getColor(iniColor,this,"選擇顏色");
    if (color.isValid()) //選擇有效
    {
        pal.setColor(QPalette::Text,color); //palette 設(shè)置選擇的顏色
        ui->plainTextEdit->setPalette(pal); //設(shè)置 palette
    }
}

void Dialog::on_btnFont_clicked()
{//選擇字體
    QFont iniFont=ui->plainTextEdit->font(); //獲取文本框的字體
    bool   ok=false;
    QFont font=QFontDialog::getFont(&ok,iniFont); //選擇字體
    if (ok) //選擇有效
        ui->plainTextEdit->setFont(font);
}

void Dialog::on_btnInputString_clicked()
{ //輸入字符串
    QString dlgTitle="輸入文字對(duì)話框";
    QString txtLabel="請(qǐng)輸入文件名";
    QString defaultInput="新建文件.txt";
    QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常文字輸入
//    QLineEdit::EchoMode echoMode=QLineEdit::Password;//密碼輸入

    bool ok=false;
    QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);
    if (ok && !text.isEmpty())
        ui->plainTextEdit->appendPlainText(text);
}

void Dialog::on_btnInputInt_clicked()
{//輸入整數(shù)
    QString dlgTitle="輸入整數(shù)對(duì)話框";
    QString txtLabel="設(shè)置字體大小";
    int defaultValue=ui->plainTextEdit->font().pointSize(); //現(xiàn)有字體大小
    int minValue=6, maxValue=50,stepValue=1; //范圍,步長(zhǎng)
    bool ok=false;
    int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,
                               defaultValue, minValue,maxValue,stepValue,&ok);
    if (ok) //是否確認(rèn)輸入
    {
        QFont   font=ui->plainTextEdit->font();
        font.setPointSize(inputValue);
        ui->plainTextEdit->setFont(font);
    }
}

void Dialog::on_btnInputFloat_clicked()
{ //輸入浮點(diǎn)數(shù)
    QString dlgTitle="輸入浮點(diǎn)數(shù)對(duì)話框";
    QString txtLabel="輸入一個(gè)浮點(diǎn)數(shù)";
    float defaultValue=3.13;

    float minValue=0, maxValue=10000;  //范圍
    int decimals=2;//小數(shù)點(diǎn)位數(shù)

    bool ok=false;
    float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,
                            defaultValue, minValue,maxValue,decimals,&ok);
    if (ok) //確認(rèn)選擇
    {
        QString str=QString::asprintf("輸入了一個(gè)浮點(diǎn)數(shù):%.2f",inputValue);
        ui->plainTextEdit->appendPlainText(str);
    }
}

void Dialog::on_btnInputItem_clicked()
{ //條目選擇輸入
    QStringList items; //ComboBox 列表的內(nèi)容
    items <<"優(yōu)秀"<<"良好"<<"合格"<<"不合格";

    QString dlgTitle="條目選擇對(duì)話框";
    QString txtLabel="請(qǐng)選擇級(jí)別";
    int     curIndex=0; //初始選擇項(xiàng)
    bool    editable=true; //ComboBox是否可編輯
    bool    ok=false;
    QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&ok);

    if (ok && !text.isEmpty())
        ui->plainTextEdit->appendPlainText(text);
}

void Dialog::on_btnMsgQuestion_clicked()
{
    QString dlgTitle="Question消息框";
    QString strInfo="文件已被修改,是否保存修改?";

    QMessageBox::StandardButton  defaultBtn=QMessageBox::NoButton; //缺省按鈕

    QMessageBox::StandardButton result;//返回選擇的按鈕
    result=QMessageBox::question(this, dlgTitle, strInfo,
                      QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
                      defaultBtn);

    if (result==QMessageBox::Yes)
        ui->plainTextEdit->appendPlainText("Question消息框: Yes 被選擇");
    else if(result==QMessageBox::No)
        ui->plainTextEdit->appendPlainText("Question消息框: No 被選擇");
    else if(result==QMessageBox::Cancel)
        ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被選擇");
    else
        ui->plainTextEdit->appendPlainText("Question消息框: 無(wú)選擇");
}

void Dialog::on_btnMsgInformation_clicked()
{
    QString dlgTitle="information消息框";
    QString strInfo="文件已經(jīng)打開,字體大小已設(shè)置";

//    QMessageBox::information(this, dlgTitle, strInfo);//使用缺省的按鈕
   QMessageBox::information(this, dlgTitle, strInfo,
                              QMessageBox::Ok,QMessageBox::NoButton);
}

void Dialog::on_btnMsgWarning_clicked()
{
    QString dlgTitle="warning 消息框";
    QString strInfo="文件內(nèi)容已經(jīng)被修改";

    QMessageBox::warning(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgCritical_clicked()
{
    QString dlgTitle="critical消息框";
    QString strInfo="有不明程序訪問(wèn)網(wǎng)絡(luò)";
    QMessageBox::critical(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgAbout_clicked()
{
    QString dlgTitle="about消息框";
    QString strInfo="我開發(fā)的數(shù)據(jù)查看軟件 V1.0 \n 保留所有版權(quán)";

    QMessageBox::about(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgAboutQt_clicked()
{
    QString dlgTitle="aboutQt消息框";
    QMessageBox::aboutQt(this, dlgTitle);

}

到了這里,關(guān)于06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 04-2_Qt 5.9 C++開發(fā)指南_SpinBox使用

    04-2_Qt 5.9 C++開發(fā)指南_SpinBox使用

    QSpinBox 用于整數(shù)的顯示和輸入,一般顯示十進(jìn)制數(shù),也可以顯示二進(jìn)制、十六進(jìn)制的數(shù),而且可以在顯示框中增加前綴或后綴。 QDoubleSpinBox 用于浮點(diǎn)數(shù)的顯示和輸入,可以設(shè)置顯示小數(shù)位數(shù),也可以設(shè)置顯示的前綴或后綴。 實(shí)例samp4_3 演示QSpinBox和QDoubleSpinBox這兩個(gè)組件的使

    2024年02月14日
    瀏覽(26)
  • 07-3_Qt 5.9 C++開發(fā)指南_文件目錄操作

    07-3_Qt 5.9 C++開發(fā)指南_文件目錄操作

    Qt 為文件和目錄操作提供了一些類,利用這些類可以方便地實(shí)現(xiàn)一些操作。Qt 提供的與文件和目錄操作相關(guān)的類包括以下幾個(gè)。 QCoreApplication:用于提取應(yīng)用程序路徑、程序名等文件信息 QFile: 除了打開文件操作外,QFile 還有復(fù)制文件、刪除文件等功能 QFileInfo:用于提取文件的信

    2024年02月13日
    瀏覽(49)
  • 09-1_Qt 5.9 C++開發(fā)指南_Qchart概述

    09-1_Qt 5.9 C++開發(fā)指南_Qchart概述

    Qt Charts 可以很方便地繪制常見的折線圖、柱狀圖、餅圖等圖表,不用自己耗費(fèi)時(shí)間和精力開發(fā)繪圖組件或使用第三方組件了。 本章首先介紹 Qt Charts 的基本特點(diǎn)和功能,以畫折線圖為例詳細(xì)說(shuō)明 Qt Charts 各主要部件的操作方法,再介紹各種常用圖表的繪圖方法,最后介紹鼠標(biāo)

    2024年02月13日
    瀏覽(68)
  • 16-4_Qt 5.9 C++開發(fā)指南_Qt 應(yīng)用程序的發(fā)布

    用 Qt 開發(fā)一個(gè)應(yīng)用程序后,將應(yīng)用程序提供給用戶在其他計(jì)算機(jī)上使用就是應(yīng)用程序的發(fā)布。應(yīng)用程序發(fā)布一般會(huì)提供一個(gè)安裝程序,將應(yīng)用程序的可執(zhí)行文件及需要的運(yùn)行庫(kù)安裝到用戶計(jì)算機(jī)上,即使用戶計(jì)算機(jī)上沒(méi)有安裝 Qt 也能正常運(yùn)行安裝的程序。 Qt的應(yīng)用程序發(fā)布

    2024年02月14日
    瀏覽(95)
  • 15-1_Qt 5.9 C++開發(fā)指南_Qt多媒體模塊概述

    15-1_Qt 5.9 C++開發(fā)指南_Qt多媒體模塊概述

    多媒體功能指的主要是計(jì)算機(jī)的音頻和視頻的輸入、輸出、顯示和播放等功能,Qt 的多媒體模塊為音頻和視頻播放、錄音、攝像頭拍照和錄像等提供支持,甚至還提供數(shù)字收音機(jī)的支持。本章將介紹 Qt 多媒體模塊的功能和使用。 Qt 多媒體模塊提供了很多類,可以實(shí)現(xiàn)如下的

    2024年02月13日
    瀏覽(39)
  • 12-4_Qt 5.9 C++開發(fā)指南_創(chuàng)建和使用共享庫(kù)

    12-4_Qt 5.9 C++開發(fā)指南_創(chuàng)建和使用共享庫(kù)

    除了靜態(tài)庫(kù),Qt 還可以創(chuàng)建共享庫(kù), 也就是 Windows 平臺(tái)上的動(dòng)態(tài)鏈接庫(kù) 。動(dòng)態(tài)鏈接庫(kù)項(xiàng)目編譯后生成 DLL 文件,DLL 文件在 windows 平臺(tái)上應(yīng)用廣泛。DLL 文件是在應(yīng)用程序運(yùn)行時(shí)加載的,不像靜態(tài)庫(kù)那樣在編譯期間就連編到應(yīng)用程序里。若更新了 DLL 文件版本,只要接口未變,

    2024年02月14日
    瀏覽(31)
  • 04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton

    04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton

    Qt 中用于項(xiàng) (Item)處理的組件有兩類, 一類是 Item Views ,包括 QListView、QTreeView、QTableView、QColumnView 等; 另一類是 Item Widgets ,包括 QListWidget、QTreeWidget 和QTableWidget。 Item Views 基于模型/視圖(Model/Vicw)結(jié)構(gòu),視圖 (View)與模型數(shù)據(jù)(Model Data)關(guān)聯(lián)實(shí)現(xiàn)數(shù)據(jù)的顯示和編輯,模型/視圖結(jié)

    2024年02月13日
    瀏覽(30)
  • 04-5_Qt 5.9 C++開發(fā)指南_QComboBox和QPlainTextEdit

    04-5_Qt 5.9 C++開發(fā)指南_QComboBox和QPlainTextEdit

    QComboBox 是下拉列表框組件類,它提供一個(gè)下拉列表供用戶選擇,也可以直接當(dāng)作一個(gè)QLineEdit 用作輸入。OComboBox 除了顯示可見下拉列表外,每個(gè)項(xiàng) (item,或稱列表項(xiàng))還可以關(guān)聯(lián)一個(gè) QVariant 類型的變量,用于存儲(chǔ)一些不可見數(shù)據(jù)。 QPlainTextEdit 是一個(gè)多行文本編輯器,用于顯示

    2024年02月14日
    瀏覽(30)
  • 04-4_Qt 5.9 C++開發(fā)指南_時(shí)間日期與定時(shí)器

    04-4_Qt 5.9 C++開發(fā)指南_時(shí)間日期與定時(shí)器

    時(shí)間日期是經(jīng)常遇到的數(shù)據(jù)類型,Qt 中時(shí)間日期類型的類如下。 QTime:時(shí)間數(shù)據(jù)類型,僅表示時(shí)間,如 15:23:13。 QDate:日期數(shù)據(jù)類型,僅表示日期,如2017-4-5. QDateTime:日期時(shí)間數(shù)據(jù)類型,表示日期和時(shí)間,如2017-03-23 08:12:43. Qt 中有專門用于日期、時(shí)間編輯和顯示的 界面組件 ,介

    2024年02月14日
    瀏覽(34)
  • 08-3_Qt 5.9 C++開發(fā)指南_Graphics View繪圖架構(gòu)

    08-3_Qt 5.9 C++開發(fā)指南_Graphics View繪圖架構(gòu)

    采用QPainter 繪圖時(shí)需要在繪圖設(shè)備的 paintEvent()事件里編寫繪圖的程序,實(shí)現(xiàn)整個(gè)繪圖過(guò)程。這種方法如同使用 Windows 的畫圖軟件在繪圖,繪制的圖形是位圖,這種方法適合于繪制復(fù)雜性不高的固定圖形,不能實(shí)現(xiàn)圖件的選擇、編輯、拖放、修改等功能。 Qt 為繪制復(fù)雜的可交

    2024年02月13日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包