1. 程式人生 > 其它 >Qt - 對話方塊

Qt - 對話方塊

QDialog

Qt中使用QDialog來實現對話方塊,QDialog繼承自QWidget,對話方塊分為兩種,一種是模態對話方塊、 另一種是非模態對話方塊。即阻塞和非阻塞對話方塊,而模態對話方塊又有兩種:應用程式級別的和視窗級別的,分別指完成對話方塊之前阻塞整個應用和阻塞關聯視窗。exec() 和 open() 分別為應用程式級別和視窗級別的模態對話方塊,show()則為非模態對話方塊。

  • 模態對話方塊:在彈出模態對話方塊時,除了該對話方塊整個應用程式視窗都無法接受使用者響應,處於等待狀態,直到模態對話方塊被關閉

  • 半模態對話方塊:又叫做無模式對話方塊,即彈出非模態對話方塊時,使用者仍然可以對其他視窗進行操作,不會因為這個對話方塊未關閉就不能操作其他視窗。

  • 非模態對話方塊:半模態對話方塊區別於模態與非模態對話方塊,或者說是介於兩者之間,也就是說半模態對話方塊會阻塞視窗的響應,但是不會影響後續程式碼的執行。

// 建構函式
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
​
void setSizeGripEnabled(bool)   //設定啟用大小手柄
​
​
[virtual slot] void open()                  // 半模態顯示視窗
[virtual slot] int QDialog::exec();         // 模態顯示視窗
​
// 隱藏模態視窗, 並且解除模態視窗的阻塞, 將 exec() 的返回值設定為 QDialog::Accepted
[virtual slot] void QDialog::accept();
// 隱藏模態視窗, 並且解除模態視窗的阻塞, 將 exec() 的返回值設定為 QDialog::Rejected
[virtual slot] void QDialog::reject();
// 關閉對話方塊並將其結果程式碼設定為r。finished()訊號將發出r;如果r是QDialog::Accepted 或 QDialog::Rejected,則還將分別發出accept()或Rejected()訊號。
[virtual slot] void QDialog::done(int r);
  • signals

    void QDialog::accepted();
    void QDialog::rejected();
    void QDialog::finished(int result);
  • 示例

    dialog->show();
    dialog->exec();
    dialog->open();
    qDebug()<<"大老虎,嗷嗷嗷~";
    ​
    connect(dialog,&QDialog::finished,this,[](int res){qDebug()<<QDialog::DialogCode(res);});
    connect(dialog,&QDialog::rejected,this,[](){qDebug()<<"rejected";});
    connect(dialog,&QDialog::accepted,this,[](){qDebug()<<"accept";});

     

QDialogButtonBox

QDialogButtongBox類是一個包含很多按鈕的控制元件,在對話方塊中有多個按鈕需要分組排列的按鈕時,可以使用QDialogButtongBox類。

  • 新增按鈕

    void addButton(QAbstractButton *button, QDialogButtonBox::ButtonRole role)
    QPushButton *addButton(const QString &text, QDialogButtonBox::ButtonRole role)
    QPushButton *addButton(QDialogButtonBox::StandardButton button)
    void setStandardButtons(QDialogButtonBox::StandardButtons buttons)

    示例:

    auto *yesBtn =  dialogBtnBox->addButton(QDialogButtonBox::StandardButton::Yes);
    yesBtn->setText("確定");
    dialogBtnBox->addButton(QDialogButtonBox::StandardButton::Close)->setText("關閉");    
    dialogBtnBox->addButton("檢視幫助",QDialogButtonBox::ButtonRole::HelpRole);
  • sngnals

    void accepted()     //當單擊按鈕框中的按鈕時將發出此訊號,只要該按鈕是用AcceptRole或YesRole定義的。  
    void clicked(QAbstractButton *button)   //當單擊按鈕框中的按鈕時,將發出此訊號,具體按鈕由button指定
    void helpRequested() //當按鈕框中的按鈕被單擊時,這個訊號就會發出,只要它是用HelpRole定義的。
    void rejected()      //當單擊按鈕框中的按鈕時,此訊號將被觸發,只要它是用RejectRole或NoRole定義的

    示例:

    //dialog 為按鈕組所在的對話方塊
    connect(dialogBtnBox,&QDialogButtonBox::accepted,this,[=](){qDebug()<<"btnaccepted";
                                                                dialog->accept();});
    connect(dialogBtnBox,&QDialogButtonBox::clicked,this,[=](){qDebug()<<"clicked";});
    connect(dialogBtnBox,&QDialogButtonBox::rejected,this,[=](){qDebug()<<"rejected";
                                                                        dialog->reject();});
    connect(dialogBtnBox,&QDialogButtonBox::helpRequested,this,[=](){qDebug()<<"helpRequested";});

 

2.1 QMessageBox

QMessageBox 對話方塊類是 QDialog 類的子類, 通過這個類可以顯示一些簡單的提示框, 用於展示警告、錯誤、問題等資訊。關於這個類我們只需要掌握一些靜態方法的使用就可以了。

// 顯示一個模態對話方塊, 將引數 text 的資訊展示到視窗中
[static] void QMessageBox::about(QWidget *parent, const QString &title, const QString &text);
​
/*
引數:
- parent: 對話方塊視窗的父視窗
- title: 對話方塊視窗的標題
- text: 對話方塊視窗中顯示的提示資訊
- buttons: 對話方塊視窗中顯示的按鈕(一個或多個)
- defaultButton
    1. defaultButton指定按下Enter鍵時使用的按鈕。
    2. defaultButton必須引用在引數 buttons 中給定的按鈕。
    3. 如果defaultButton是QMessageBox::NoButton, QMessageBox會自動選擇一個合適的預設值。
*/
​
//顯示帶有標題標題和文字文字的簡單關於框。
void about(QWidget *parent, const QString &title, const QString &text)
void aboutQt(QWidget *parent, const QString &title = QString())
​
​
// 顯示一個資訊模態對話方塊
[static] QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);
​
// 顯示一個錯誤模態對話方塊
[static] QMessageBox::StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);
​
// 顯示一個問題模態對話方塊
[static] QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton);
​
// 顯示一個警告模態對話方塊
[static] QMessageBox::StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

  • 示例

    QMessageBox::about(this,"關於Maye","我叫<font style=\"color:red\">嚴炯強</font>,今年十歲了。是一個內向而又聰明的女孩。\
                               <br>我的愛好有:運動、畫畫、看書、做遊戲、科學課和語文課。\
                               <br>去年,我一共得了兩張獎狀。一張是運動小健將的獎狀,另一張是百里路小學冬鍛跳繩比賽二年級段女子組第一名的獎狀。我明白:只要努力,必須會有收穫的。\
                               <br>每次我考到一百分的時候,爸爸媽媽就會獎勵我,我也十分高興。有一次我考了一百分,媽媽買了一個有輪子的書包給我。我考了一百分,爸爸總會帶我去吃肯德基。\
                               <br>所以,在新學期裡,我要更加努力,再創佳績!\
                               <br><a href=\"www.bilibili.com\">我的個人主頁</a>");

     

2.2 QFileDialog

QFileDialog 對話方塊類是 QDialog 類的子類, 通過這個類可以選擇要開啟/儲存的檔案或者目錄。關於這個類我們只需要掌握一些靜態方法的使用就可以了。

/*
通用引數:
	- parent: 當前對話方塊視窗的父物件也就是父視窗
	- caption: 當前對話方塊視窗的標題
	- dir: 當前對話方塊視窗開啟的預設目錄
	- options: 當前對話方塊視窗的一些可選項,列舉型別, 一般不需要進行設定, 使用預設值即可
	- filter: 過濾器, 在對話方塊中只顯示滿足條件的檔案, 可以指定多個過濾器, 使用 ;; 分隔
		- 樣式舉例: 
			- Images (*.png *.jpg)
			- Images (*.png *.jpg);;Text files (*.txt)
	- selectedFilter: 如果指定了多個過濾器, 通過該引數指定預設使用哪一個, 不指定預設使用第一個過濾器
*/
// 開啟一個目錄, 得到這個目錄的絕對路徑
[static] QString QFileDialog::getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly);

// 開啟一個檔案, 得到這個檔案的絕對路徑
[static] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

// 開啟多個檔案, 得到這多個檔案的絕對路徑
[static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

// 開啟一個目錄, 使用這個目錄來儲存指定的檔案
[static] QString QFileDialog::getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

 

2.3 QFontDialog

  • QFont 字型類

    QFont::QFont();
    /*
    引數:
    	- family: 本地字型檔中的字型名, 通過 office 等檔案軟體可以檢視
    	- pointSize: 字型的字號
    	- weight: 字型的粗細, 有效範圍為 0 ~ 99
    	- italic: 字型是否傾斜顯示, 預設不傾斜
    */
    QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);
    
    // 設定字型
    void QFont::setFamily(const QString &family);
    // 根據字號設定字型大小
    void QFont::setPointSize(int pointSize);
    // 根據畫素設定字型大小
    void QFont::setPixelSize(int pixelSize);
    // 設定字型的粗細程度, 有效範圍: 0 ~ 99
    void QFont::setWeight(int weight);
    // 設定字型是否加粗顯示
    void QFont::setBold(bool enable);
    // 設定字型是否要傾斜顯示
    void QFont::setItalic(bool enable);
    
    // 獲取字型相關屬性(一般規律: 去掉設定函式的 set 就是獲取相關屬性對應的函式名)
    QString QFont::family() const;
    bool QFont::italic() const;
    int QFont::pixelSize() const;
    int QFont::pointSize() const;
    bool QFont::bold() const;
    int QFont::weight() const;

     

     

  • QFontDialog類的靜態API

    [static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions());
    
    [static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = nullptr);
  • 視窗字型的設定

    // QWidget 類
    // 得到當前視窗使用的字型
    const QWidget::QFont& font() const;
    // 給當前視窗設定字型, 只對當前視窗類生效
    void QWidget::setFont(const QFont &);
    
    // QApplication 類
    // 得到當前應用程式物件使用的字型
    [static] QFont QApplication::font();
    // 給當前應用程式物件設定字型, 作用於當前應用程式的所有視窗
    [static] void QApplication::setFont(const QFont &font, const char *className = nullptr);

     

2.4 QColorDialog

  • 顏色類 QColor

    // 建構函式
    QColor::QColor(Qt::GlobalColor color);
    QColor::QColor(int r, int g, int b, int a = ...);
    QColor::QColor();
    
    // 引數 red, green, blue, alpha 取值範圍是 0-255
    void QColor::setRed(int red);
    void QColor::setGreen(int green);
    void QColor::setBlue(int blue);
    void QColor::setAlpha(int alpha);
    void QColor::setRgb(int r, int g, int b, int a = 255);
    
    int QColor::red() const;
    int QColor::green() const;
    int QColor::blue() const;
    int QColor::alpha() const;
    void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;
  • QFontDialog類的靜態API

    // 彈出顏色選擇對話方塊, 並返回選中的顏色資訊
    [static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions());

     

2.5 QInputDialog

[static] double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

[static] int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

[static] QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    
[static] QString QInputDialog::getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);


[static] QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

 

2.6 QProgressDialog

// 建構函式
/*
引數:
	- labelText: 對話方塊中顯示的提示資訊
	- cancelButtonText: 取消按鈕上顯示的文字資訊
	- minimum: 進度條最小值
	- maximum: 進度條最大值
	- parent: 當前視窗的父物件
	- f: 當前進度視窗的flag屬性, 使用預設屬性即可, 無需設定
*/
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());


// 設定取消按鈕顯示的文字資訊
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);

// 公共成員函式和槽函式
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);

// 得到進度條最小值
int QProgressDialog::minimum() const;
// 設定進度條最小值
void QProgressDialog::setMinimum(int minimum);

// 得到進度條最大值
int QProgressDialog::maximum() const;
// 設定進度條最大值
void QProgressDialog::setMaximum(int maximum);

// 設定進度條範圍(最大和最小值)
[slot] void QProgressDialog::setRange(int minimum, int maximum);

// 得到進度條當前的值
int QProgressDialog::value() const;
// 設定進度條當前的值
void QProgressDialog::setValue(int progress);


bool QProgressDialog::autoReset() const;
// 當value() = maximum()時,程序對話方塊是否呼叫reset(),此屬性預設為true。
void QProgressDialog::setAutoReset(bool reset);


bool QProgressDialog::autoClose() const;
// 當value() = maximum()時,程序對話方塊是否呼叫reset()並且隱藏,此屬性預設為true。
void QProgressDialog::setAutoClose(bool close);

// 判斷使用者是否按下了取消鍵, 按下了返回true, 否則返回false
bool wasCanceled() const;


// 重置進度條
// 重置進度對話方塊。wascancelled()變為true,直到程序對話方塊被重置。進度對話方塊被隱藏。
[slot] void QProgressDialog::cancel();
// 重置進度對話方塊。如果autoClose()為真,程序對話方塊將隱藏。
[slot] void QProgressDialog::reset();   

// 訊號
// 當單擊cancel按鈕時,將發出此訊號。預設情況下,它連線到cancel()槽。
[signal] void QProgressDialog::canceled();

// 設定視窗的顯示狀態(模態, 非模態)
/*
引數:
	Qt::NonModal  -> 非模態
	Qt::WindowModal	-> 模態, 阻塞父視窗
	Qt::ApplicationModal -> 模態, 阻塞應用程式中的所有視窗
*/
void QWidget::setWindowModality(Qt::WindowModality windowModality);

2.7 QErrorMessage

2.8 QColorDialog中文翻譯不全?

QColorDialog翻譯方法

搜尋

複製