Font Selection Dialog
The QFontDialog widget lets users pick a typeface and its attributes at run time. Typical workflow:
- Create the dialog.
- Seed it with an initial font.
- Show it modally and read the chosen font if the user accepts.
void pickFont()
{
QFontDialog dlg;
dlg.setWindowTitle("Font Picker");
dlg.setCurrentFont(QFont("Consolas", 11, QFont::DemiBold));
if (dlg.exec() == QDialog::Accepted)
qDebug() << "Chosen font:" << dlg.selectedFont();
}
Progress Feedback Dialog
QProgressDialog keeps the user informed during lengthy operasions. Key properties:
minimumandmaximumdefine the range.setValue()moves the bar.- Call
exec()for a blocking dialog orshow()for non-blocking use.
void simulateDownload()
{
QProgressDialog dlg("Downloading...", "Cancel", 0, 100);
dlg.setWindowModality(Qt::ApplicationModal);
for (int step = 0; step <= 100; ++step)
{
dlg.setValue(step);
QThread::msleep(50); // real work goes here
if (dlg.wasCanceled()) break;
}
}
Print Setup Dialog
QPrintDialog surfaces printer options and returns a configured QPrinter object. A minimal print routine:
void printDocument()
{
QPrintDialog dlg;
if (dlg.exec() != QDialog::Accepted) return;
QPrinter *printer = dlg.printer();
printer->setOutputFileName("D:/greetings.pdf");
QTextDocument doc;
doc.setPlainText("Hello, Qt!");
doc.print(printer);
}
Complete Example
The following program shows all three dialogs from a single window.
// main.cpp
#include <QApplication>
#include "mainwidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWidget w;
w.show();
return app.exec();
}
// mainwidget.h
#pragma once
#include <QWidget>
#include <QPushButton>
class MainWidget : public QWidget
{
Q_OBJECT
public:
explicit MainWidget(QWidget *parent = nullptr);
private slots:
void onFontClicked();
void onProgressClicked();
void onPrintClicked();
private:
QPushButton m_fontBtn {"Font"};
QPushButton m_progBtn {"Progress"};
QPushButton m_printBtn{"Print"};
};
// mainwidget.cpp
#include "mainwidget.h"
#include <QFontDialog>
#include <QProgressDialog>
#include <QPrintDialog>
#include <QPrinter>
#include <QTextDocument>
#include <QThread>
#include <QVBoxLayout>
#include <QDebug>
MainWidget::MainWidget(QWidget *parent) : QWidget(parent)
{
setFixedSize(220, 150);
auto *lay = new QVBoxLayout(this);
lay->addWidget(&m_fontBtn);
lay->addWidget(&m_progBtn);
lay->addWidget(&m_printBtn);
connect(&m_fontBtn, &QPushButton::clicked, this, &MainWidget::onFontClicked);
connect(&m_progBtn, &QPushButton::clicked, this, &MainWidget::onProgressClicked);
connect(&m_printBtn, &QPushButton::clicked, this, &MainWidget::onPrintClicked);
}
void MainWidget::onFontClicked()
{
bool ok = false;
QFont f = QFontDialog::getFont(&ok, QFont("Arial", 10), this);
if (ok) qDebug() << "Selected:" << f;
}
void MainWidget::onProgressClicked()
{
QProgressDialog dlg("Processing...", "Abort", 0, 100, this);
dlg.setWindowModality(Qt::WindowModal);
for (int i = 0; i <= 100; ++i)
{
dlg.setValue(i);
if (dlg.wasCanceled()) break;
QThread::msleep(30);
}
}
void MainWidget::onPrintClicked()
{
QPrintDialog dlg(this);
if (dlg.exec() == QDialog::Accepted)
{
QPrinter *p = dlg.printer();
p->setOutputFileName("D:/demo.pdf");
QTextDocument doc;
doc.setHtml("<h1>Qt Print Test</h1><p>Success!</p>");
doc.print(p);
}
}