第六章QDialog(Layouts)
- 模态对话框:在弹出对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到对话框关闭
- 非模态对话框:又叫无模式对话框,即弹出非模态对话框时,用户仍然可以对其他窗口进行操作
- 半模态对话框:介于模态和非模态之间,会阻塞窗口的响应,但不影响后续代码的执行
#include <QDialog>
QDialog dialog;
dialog.open();
qDebug() << "dialog";
QDialogButtonBox
#include <QDialogButtonBox>
#include <QPushButton>
auto dialogbox = new QDialogButtonBox;
dialogbox->addButton(QDialogButtonBox::Ok);
dialogbox->addButton("取消", QDialogButtonBox::RejectRole);
dialogbox->addButton(new QPushButton("保存"), QDialogButtonBox::AcceptRole);
dialogbox->setOrientation(Qt::Vertical);
QObject::connect(dialogbox, &QDialogButtonBox::accepted, [=] {
qInfo() << "接受";
dialogbox->close(); });
QObject::connect(dialogbox, &QDialogButtonBox::rejected, [] { qInfo() << "拒绝"; });
dialogbox->setAttribute(Qt::WA_DeleteOnClose);
dialogbox->show();
QMessageBox
#include <QMessageBox>
QMessageBox* msgBox = new QMessageBox;
msgBox->setText("今天天气不错");
msgBox->setIcon(QMessageBox::Warning);
msgBox->exec();
QMessageBox::about(nullptr, "静态", "今天天气不错");
QMessageBox::aboutQt(nullptr);
QMessageBox::information(nullptr, "模态", "又是一个好天气");
auto sBtn = QMessageBox::information(nullptr, "sbtn", "standard", QMessageBox::Cancel, QMessageBox::Yes);
if (sBtn == QMessageBox::Cancel)
qInfo() << "取消";
else
qInfo() << "继续";
QMessageBox::critical(nullptr, "", "好天气+1");
QMessageBox::warning(nullptr, "", "坏天气");
QMessageBox::question(nullptr, "", "今天天气怎么样?");
QFileDialog
#include <QFileDialog>
QFileDialog* flDialog = new QFileDialog(nullptr, "标题", "./");
flDialog->exec();
QString path = QFileDialog::getExistingDirectory(nullptr, "", "./");
if (!path.isEmpty())
qInfo() << path;
QString filePath = QFileDialog::getOpenFileName(nullptr, "", "./", "image(*.jpg *.png);;file(*.c *.cpp)");
qInfo() << filePath;
auto files = QFileDialog::getOpenFileNames(nullptr, "", "./", "image(*.jpg *.png);;file(*.c *.cpp)");
for (auto f : files) {
qInfo() << f;
}
auto savefile = QFileDialog::getSaveFileName();
qInfo() << savefile;
QFontDialog
#include <QPainter>
#include <QWidget>
class Widget : public QWidget {
Q_OBJECT
public:
Widget(QWidget* parent = nullptr);
~Widget();
protected:
void paintEvent(QPaintEvent* event) override;
};
Widget::Widget(QWidget* parent)
: QWidget(parent)
{
QFont font;
font.setBold(true);
font.setPointSize(30);
font.setItalic(true);
font.setFamily("Arial");
setFont(font);
}
void Widget::paintEvent(QPaintEvent* event)
{
QPainter p(this);
p.drawText(50, 50, "这就是我选择的字体");
}
#include <QFontDialog>
auto fontDialog = new QFontDialog(font, this);
bool ok;
QFont f = QFontDialog::getFont(&ok, this);
if (ok) {
qInfo() << "选择了新字体:" << f.family();
this->setFont(f);
} else {
qInfo() << "没选择,当前字体:" << font.family();
this->setFont(font);
}
QColorDialog
#include <QColor>
#include <QColorDialog>
QColor c(20, 34, 50);
QColor c1("#3e99da");
QColor c2;
c2.setRed(10);
c2.setGreen(20);
qInfo() << c << c1 << c2;
auto colorDialog = new QColorDialog(c, this);
colorDialog->show();
connect(colorDialog, &QColorDialog::colorSelected, [](QColor c) {
qInfo() << c;
});
auto newcolor = QColorDialog::getColor(c, this, "选择颜色");
qInfo() << newcolor;
QInpuDialog
#include <QInputDialog>
bool ok;
double dnum = QInputDialog::getDouble(this, "提示", "请输入浮点数", 100, 0, 999999, 2, &ok, Qt::Dialog, 10);
if (ok)
qInfo() << "新的值" << dnum;
else
qInfo() << "还是原来的值" << dnum;
int inum = QInputDialog::getInt(this, "提示", "请输入整数");
qInfo() << inum;
QStringList strlist;
strlist << "学生"
<< "萝莉"
<< "御姐";
qInfo() << QInputDialog::getItem(this, "提示", "Item", strlist);
qInfo() << QInputDialog::getText(this, "", "");
QProgressDialog
#include <QProgressDialog>
#include <QTimer>
auto pgDialog = new QProgressDialog("正在发送", "取消发送", 0, 100, this);
pgDialog->show();
QTimer* timer = new QTimer(this);
timer->start(100);
connect(timer, &QTimer::timeout, [=] {
static int a = 0;
pgDialog->setValue(a++);
});
connect(pgDialog, &QProgressDialog::canceled, timer, &QTimer::stop);
QErrorMessage
#include <QErrorMessage>
#include <QPushButton>
auto errMsg = new QErrorMessage(this);
auto btn = new QPushButton(this);
connect(btn, &QPushButton::clicked, [=] {
errMsg->showMessage("来了,老弟");
errMsg->showMessage("是的", "1");
errMsg->showMessage("是的", "2");
errMsg->showMessage("不是");
errMsg->showMessage("不是");
});