Qt - 對話方塊
阿新 • • 發佈:2022-04-16
-
模態對話方塊:在彈出模態對話方塊時,除了該對話方塊整個應用程式視窗都無法接受使用者響應,處於等待狀態,直到模態對話方塊被關閉
-
半模態對話方塊:又叫做無模式對話方塊,即彈出非模態對話方塊時,使用者仍然可以對其他視窗進行操作,不會因為這個對話方塊未關閉就不能操作其他視窗。
-
非模態對話方塊:半模態對話方塊區別於模態與非模態對話方塊,或者說是介於兩者之間,也就是說半模態對話方塊會阻塞視窗的響應,但是不會影響後續程式碼的執行。
// 建構函式
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中文翻譯不全?
搜尋
複製