如何自學qt(4)——對話方塊

今池魚發表於2020-10-06

1,觸發對話方塊

在qt中,對話方塊分成兩種
一種是模態對話方塊,簡單的說,就是點開後無法忽視它,必須要關閉才能操作其他視窗
【如果強制操作會發出duang的聲音】
另一種是非模態對話方塊,跟上面那個相反,是一個無所謂的對話方塊。
具體的話……
先在ui裡建立兩個觸發
在這裡插入圖片描述
一個叫new,一個叫open
用new觸發模態對話方塊的生成,程式碼如下

connect(ui->actionnew,&QAction::triggered,[=](){
      //對話方塊分類
      //模態對話方塊(不可以對其他對話方塊操作),非模態(可以)
      //模態建立 阻塞
      QDialog dlg(this);
      dlg.resize(200,100);
      dlg.exec();
      qDebug() << "success";
    });

需要說明幾點
1,運用了訊號槽和匿名函式
2,觸發點選使用的是triggered,因為沒有click
3,不寫=會報錯
4,生成模態對話方塊需要使用exec,這是一種阻塞函式——換言之,函式執行到這裡就停住了,所以在關閉視窗後控制檯才會出現“success”
5,修改大小是因為預設的對話方塊太小,不改會彈警告

用open觸發非模態的對話方塊,程式碼如下

connect(ui->actionopen,&QAction::triggered,[=]()
    {
        //非模態對話方塊
        QDialog *dlg2 = new QDialog(this);
        dlg2->resize(200,100);
        dlg2->show();
        dlg2->setAttribute(Qt::WA_DeleteOnClose);
        qDebug() << "success2";
    });

需要說明的幾點:
1,要用new申請堆上的記憶體,不然,函式結束後棧記憶體回收,會出現視窗閃一下就消失的鬼片效果……
2,但是,堆上記憶體不會被自動回收,所以我們要設定一個狀態參量,設定它關閉視窗時回收
【attribute這裡翻譯成狀態,後面的列舉值是去幫助裡面查的】

2,標準對話方塊

所謂標準對話方塊,是Qt內建的一系列對話方塊,用於簡化開發
總所周知,qt是面向幫助文件程式設計的
所以……
在這裡插入圖片描述
先搜個文件康康。
在檔案裡新增標頭檔案,然後實現一下試試
這個可以直接呼叫靜態函式,所以舉一個做例子

connect(ui->actionnew,&QAction::triggered,[=](){
      //QMessageBox::critical(this,"first","錯誤");
      //QMessageBox::information(this,"second","資訊");
       if(QMessageBox::question(this,"third","是否要這樣?",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Save)
            qDebug() << "save";
    });

根據編譯器的提示和上面的幫助文件,我們可以知道這個函式的幾個引數含義
比如question 從左到右為父類,名稱,文字框內容,下面選擇摁鈕的文字和預設摁鈕
在這裡插入圖片描述
其他函式類似
返回值是兩個選擇摁鈕的列舉值

3,其他常見對話方塊

①顏色對話方塊
這個對話方塊還蠻有意思的
順便一提,在qt中,顏色有三個引數,分別是red(),green()和blue()
而且這個對話方塊有自己的標頭檔案

#include <QColorDialog>
connect(ui->actionnew,&QAction::triggered,[=]()
    {
         QColor color =QColorDialog::getColor(QColor(255,0,0));
         qDebug() << color.red();
    });

然後就會彈出這樣一個對話方塊
在這裡插入圖片描述
【看見了嗎?輸入的255,0,0是初始值哦】
用這個對話方塊可以選定顏色
②選中檔案對話方塊
同樣需要標頭檔案

#include <QFileDialog>
connect(ui->actionnew,&QAction::triggered,[=]()
    {
         //檔案對話方塊
         QFileDialog::getOpenFileName(this,"open","C:\\Users\\井室羽\\Desktop","*.doc");
    });

三個引數,父類,檔案路徑和篩選條件(可不加)
返回值是QString,即選中的檔案路徑
③字型對話方塊
跟顏色對話方塊比較類似,順便一提字型的英文是FONT

#include <QFontDialog>
 //字型對話方塊
        bool flag;
        QFont font = QFontDialog::getFont(&flag,QFont("華文彩雲",36));
        qDebug() << font.family().toUtf8().data();

QFont就是字型的類,裡面有family(字型),pointSize(大小),bold(是否加粗),italic(是否傾斜)都可以列印出來
另:列印字型需要轉一下格式,這個跟之前一樣。

相關文章