Qt:对话框QMessageBox/QDialog

模态对话框:对话框阻塞,此时只能在对话框操作,不能操作父窗口
非模态对话框:可以操作父窗口

标准对话框

1
1. 构造函数构建
1
2
3
4
5
6
7
8
9
10
QMessageBox message(QMessageBox::NoIcon, "title", "content", QMessageBox::Yes | QMessageBox::No |    QMessageBox::Cancel);
    message.setIconPixmap(QPixmap("icon.png"));
    message.setStyleSheet("background-color:rgb(50,50,50);color: rgb(255,255,255);width:300px;font-size:28px;");
    // 非模态
    message.show();
    // 模态
    int res = message.exec();
    if(QMessageBox::Yes == res) {
        qDebug() << "ok";
    }
1
2. 静态方法(about/question/warning/information)
1
2
3
4
int res = QMessageBox::about(this, "title", "content", QMessageBox::Save | QMessageBox::Cancel);
    if(QMessageBox::Save == res) {
        qDebug() << "save";
    }

Qdialog

属性
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Dialog); // 置于所有程序的顶层

模态:
setAttribute(Qt::WA_ShowModal, true); // 属性设置
setWindowModality(Qt::WindowModal); // 设置阻塞类型
setModal(true);

1
2
3
4
5
6
7
Qdialog dialog;
int res = dialog.exec();
if (res == QDialog::Accepted) {
    QMessageBox::(this, "INFORMATION", "You clicked OK button!");
} else if (res == QDialog::Rejected) {
     QMessageBox::(this, "INFORMATION", "You clicked NO button!");
}

QDialogButtonBox

1
2
3
QDialogButtonBox* btnBox = new QDialogButtonBox(Qt::Horizontal); //QDialogButtonBox使用方法
btnBox->addButton(btnOK, QDialogButtonBox::ActionRole);
btnBox->addButton(btnNO, QDialogButtonBox::ActionRole);

文件对话框

1
2
3
4
5
// 默认打开目录"." ,后缀名过滤
QString filePath = QFileDialog::getOpenFileName(this, "title", ".", "image(*.jpg,*.png);all(*.*)");
if(filePath.length() == 0) {
    QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
}