对话框
发表于:2024-12-26 | 分类: qt
字数统计: 505 | 阅读时长: 2分钟 | 阅读量:

原生对话框

注意在cmake中查找和链接PrintSupport

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
#include <QMainWindow>
#include <QMessageBox>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
#include <QPrinter>
#include <QProgressBar>
#include <QPushButton>
#include <QTextEdit>
#include <QVBoxLayout>

class MainWindow : public QMainWindow {
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private slots:
void selectColor();
void selectFile();
void selectFont();
void showMessage();
void printDocument();
void previewPrint();
void updateProgress();

private:
QVBoxLayout *layout;
QPushButton *colorButton;
QPushButton *fileButton;
QPushButton *fontButton;
QPushButton *messageButton;
QPushButton *printButton;
QPushButton *previewButton;
QProgressBar *progressBar;
QTextEdit *textEdit;
int progressValue;
};

#endif // MAINWINDOW_H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "MainWindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), progressValue(0) {
QWidget *centralWidget = new QWidget(this);
layout = new QVBoxLayout(centralWidget);

// 添加控件
colorButton = new QPushButton("选择颜色", this);
fileButton = new QPushButton("选择文件", this);
fontButton = new QPushButton("选择字体", this);
messageButton = new QPushButton("显示消息", this);
printButton = new QPushButton("打印", this);
previewButton = new QPushButton("打印预览", this);
progressBar = new QProgressBar(this);
textEdit = new QTextEdit(this);

layout->addWidget(colorButton);
layout->addWidget(fileButton);
layout->addWidget(fontButton);
layout->addWidget(messageButton);
layout->addWidget(printButton);
layout->addWidget(previewButton);
layout->addWidget(progressBar);
layout->addWidget(textEdit);

setCentralWidget(centralWidget);

// 信号与槽
connect(colorButton, &QPushButton::clicked, this, &MainWindow::selectColor);
connect(fileButton, &QPushButton::clicked, this, &MainWindow::selectFile);
connect(fontButton, &QPushButton::clicked, this, &MainWindow::selectFont);
connect(messageButton, &QPushButton::clicked, this, &MainWindow::showMessage);
connect(printButton, &QPushButton::clicked, this, &MainWindow::printDocument);
connect(previewButton, &QPushButton::clicked, this,
&MainWindow::previewPrint);
connect(progressBar, &QProgressBar::valueChanged, this,
&MainWindow::updateProgress);
}

MainWindow::~MainWindow() {}

void MainWindow::selectColor() {
QColor color = QColorDialog::getColor(Qt::white, this, "选择颜色");
if (color.isValid()) {
textEdit->setTextColor(color);
}
}

void MainWindow::selectFile() {
QString fileName = QFileDialog::getOpenFileName(
this, "选择文件", "", "所有文件 (*.*);;文本文件 (*.txt)");
if (!fileName.isEmpty()) {
textEdit->setText(fileName);
}
}

void MainWindow::selectFont() {
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
if (ok) {
textEdit->setFont(font);
}
}

void MainWindow::showMessage() {
QMessageBox::information(this, "消息框", "这是一个消息框示例!");
}

void MainWindow::printDocument() {
QPrinter printer;
QPrintDialog printDialog(&printer, this);
if (printDialog.exec() == QDialog::Accepted) {
textEdit->print(&printer);
}
}

void MainWindow::previewPrint() {
QPrinter printer;
QPrintPreviewDialog previewDialog(&printer, this);
connect(&previewDialog, &QPrintPreviewDialog::paintRequested, this,
[this, &printer]() { textEdit->print(&printer); });
previewDialog.exec();
}

void MainWindow::updateProgress() {
progressValue = (progressValue + 10) % 110;
progressBar->setValue(progressValue);
}

自定义对话框

下一篇:
qt容器