目录
零. 窗口简介
一. 普通窗口
二. 无边框窗口
三. 顶层窗口
四. 模态对话框
五. 非模态对话框
六. 消息对话框
七. 文件对话框
八. 颜色对话框
九. 进度对话框
十. 总结
零. 窗口简介
在 Qt中,普通窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最大最小化按钮等。窗口可以作为GUI程序的主要窗口,用于显示数据、接收用户输入和执行其他交互操作。
Qt中的窗口类包括QWidget、QDialog和QMainWindow等。其中,QWidget是所有用户界面对象的基类,可以作为独立的窗口或其他窗口的子窗口;QDialog是对话框窗口的基类,用于执行短期任务或与用户进行互动;QMainWindow是主窗口的基类,通常包含菜单栏、工具栏和状态栏等。
创建普通窗口可以使用Qt Creator等集成开发环境,也可以通过编写代码实现。在代码中,可以使用QWidget或其他窗口类创建窗口对象,并设置窗口的属性和样式。例如,可以设置窗口的标题、大小、位置、背景颜色等。
窗口还可以设置为无边框或者置顶。通过设置窗口标志(Qt::WindowFlags),可以控制窗口的行为和外观,如是否显示边框、是否置顶等。
此外,窗口可以接收鼠标、键盘等事件,并通过信号和槽机制与其他对象进行交互。开发者可以在窗口类中定义信号和槽函数,以实现对窗口事件的响应和处理。
总的来说,普通窗口是Qt中构建GUI应用程序的重要组成部分,通过合理使用窗口类和设置窗口属性,可以创建出满足不同需求的窗口界面。
一. 普通窗口
在 Qt中,普通窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最大最小化按钮等。窗口可以作为GUI程序的主要窗口,用于显示数据、接收用户输入和执行其他交互操作。Qt中的窗口类包括QWidget、QDialog和QMainWindow等。其中,QWidget是所有用户界面对象的基类,可以作为独立的窗口或其他窗口的子窗口;QDialog是对话框窗口的基类,用于执行短期任务或与用户进行互动;QMainWindow是主窗口的基类,通常包含菜单栏、工具栏和状态栏等。
以下是一个使用QMainWindow创建普通窗口的示例代码
#include <QApplication>
#include <QMainWindow>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    // 创建主窗口
    QMainWindow window;
    // 设置窗口标题
    window.setWindowTitle("My Main Window");
    // 显示窗口
    window.show();
    return app.exec();
}
 
效果图:

二. 无边框窗口
无边框窗口没有传统窗口的边框和标题栏等元素,通常具有更简洁和自定义程度更高的外观。
属性:
Qt::WindowFlags:用于设置窗口的特性,如无边框属性。
方法:
setWindowFlags(Qt::WindowFlags flags):设置窗口的标志以实现无边框等效果。
示例代码:
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QWidget window;
    // 设置为无边框
    window.setWindowFlags(Qt::FramelessWindowHint);
    window.show();
    return app.exec();
}
 
效果图

三. 顶层窗口
顶层窗口是指没有父窗口的窗口,它通常是应用程序的主窗口或独立的对话框。在 Qt中,顶层窗口具有一些特殊的属性和行为。
属性:
Qt::WindowFlags:用于设置窗口的标志,如窗口类型、边框样式、置顶等。windowTitle:窗口的标题。windowIcon:窗口的图标。
方法:
setWindowFlags(Qt::WindowFlags flags):设置窗口的标志。setWindowTitle(QString title):设置窗口的标题。setWindowIcon(QIcon icon):设置窗口的图标。
示例代码:
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QWidget window;
    // 设置为顶层窗口
    window.setWindowFlags(Qt::Window);
    // 设置窗口标题和图标
    window.setWindowTitle("顶层窗口示例");
    window.setWindowIcon(QIcon(":/icon.png"));
    window.show();
    return app.exec();
}
 
效果图:

四. 模态对话框
 模态对话框会阻塞与该对话框无关的其他窗口交互,直到该对话框被关闭,用户必须先处理模态对话框才能继续操作其他部分。
模态对话框属性:
- 通常具有明确的模态标志。
 
模态对话框方法:
exec():用于显示模态对话框并进入模态状态。
模态对话框示例代码:
#include <QDialog>
#include <QPushButton>
#include<QApplication>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QDialog dialog;
    QPushButton button("确定", &dialog);
    dialog.exec();
    return app.exec();
}
 
效果图:

五. 非模态对话框
非模态对话框不会阻塞其他窗口的交互,用户可以在不关闭它的情况下继续操作其他部分。
属性:
- 可能有一些与显示状态相关的属性。
 
方法:
show():用于显示非模态对话框。
非模态对话框示例代码:
#include <QDialog>
#include <QPushButton>
#include<QApplication>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QDialog dialog;
    QPushButton button("确定", &dialog);
    dialog.show();
    return app.exec();
}
 
效果图:

六. 消息对话框
消息对话框是一种用于向用户显示信息、提示或询问的对话框。
属性:
- 通常有显示的文本内容、标题等属性。
 
方法:
QMessageBox::information():显示信息提示对话框。QMessageBox::warning():显示警告对话框。QMessageBox::critical():显示严重错误对话框。QMessageBox::question():显示询问对话框并返回用户选择(是、否等)。
示例代码:
#include <QDialog>
#include <QPushButton>
#include<QApplication>
#include <QMessageBox>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    // 信息提示
    QMessageBox::information(nullptr, "信息", "这是一条信息");
    // 警告
    QMessageBox::warning(nullptr, "警告", "这是一个警告");
    // 询问
    if (QMessageBox::question(nullptr, "询问", "是否继续?") == QMessageBox::Yes) {
        // 用户选择了是
    } else {
        // 用户选择了否
    }
    return app.exec();
}
 
效果图:



七. 文件对话框
文件对话框用于让用户选择文件或目录,它提供了直观的界面方便用户进行文件操作。
属性:
QFileDialog::Options:可以设置一些选项,如是否显示隐藏文件等。
方法:
getOpenFileName():获取用户选择的单个文件路径。getOpenFileNames():获取用户选择的多个文件路径。getExistingDirectory():获取用户选择的目录路径。
示例:
#include <QApplication>
#include <QFileDialog>
#include <QDebug>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    // 获取单个文件路径
    QString filePath = QFileDialog::getOpenFileName(nullptr, "选择文件", "", "Text Files (*.txt);;All Files (*)");
    if (!filePath.isEmpty()) {
        qDebug() << "选择的单个文件路径:" << filePath;
    }
    // 获取多个文件路径
    QStringList filePaths = QFileDialog::getOpenFileNames(nullptr, "选择文件", "", "Text Files (*.txt);;All Files (*)");
    for (const QString &path : filePaths) {
        qDebug() << "选择的多个文件之一路径:" << path;
    }
    // 获取目录路径
    QString dirPath = QFileDialog::getExistingDirectory(nullptr, "选择目录");
    if (!dirPath.isEmpty()) {
        qDebug() << "选择的目录路径:" << dirPath;
    }
    return 0;
}
 
八. 颜色对话框
颜色对话框是一种用于选择颜色的对话框。它提供了一个可视化的界面,让用户可以从预定义的颜色中选择或自定义颜色。
属性:
QColorDialog::Options:可设置对话框的选项,如是否显示透明度等。
方法:
getColor():获取用户选择的颜色。
示例:
#include<QApplication>
#include <QColorDialog>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    // 获取用户选择的颜色
    QColor color = QColorDialog::getColor(Qt::red, nullptr, "选择颜色");
    // 输出选择的颜色
    qDebug() << "选择的颜色:" << color;
    return app.exec();
}
 
效果图:

九. 进度对话框
进度对话框用于向用户显示操作的进度情况,让用户了解当前任务的进展状态。
属性:
minimum和maximum:进度范围的最小值和最大值。value:当前进度值。
方法:
setValue(int value):设置当前进度值。
示例:
#include <QProgressDialog>
#include <QTimer>
#include<QApplication>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QProgressDialog progressDialog("任务进行中...", "取消", 0, 100);
    progressDialog.setWindowTitle("进度");
    QTimer timer;
    int progress = 0;
    QObject::connect(&timer, &QTimer::timeout, [&]() {
        progress++;
        progressDialog.setValue(progress);
        if (progress == 100) {
            timer.stop();
        }
    });
    timer.start(100);
    progressDialog.exec();
    return 0;
}
 
效果图:

十. 总结
QT 窗口总结:
QT 中的窗口是应用程序与用户交互的主要界面元素。
- 可以具有各种属性,如大小、位置、标题等。
 - 有不同类型,如顶层窗口、子窗口等。
 - 可以通过代码进行创建、设置属性和显示。
 
弹窗总结:
弹窗是在特定情境下弹出的窗口,用于与用户进行特定交互。
- 消息对话框:如信息提示、警告、严重错误、询问等,用于传达信息或获取简单的用户选择。
 - 文件对话框:方便用户选择文件或目录。
 - 颜色对话框:用于选择颜色。
 - 进度对话框:展示任务进度。
 
弹窗通常具有针对性的功能,能在特定场景下提供简洁有效的交互方式,增强用户体验和应用程序的功能性。它们可以根据需要动态弹出,并根据用户操作进行相应的处理和反馈。



















