QT模块--GUI和QtWidgets
一、GUI
QtGui
模块是 Qt 的一个核心模块,它提供了与图形用户界面相关的低级功能。尽管它的名字中包含 “GUI”,但它实际上并不直接提供具体的窗口小部件(widgets)。相反,QtGui
提供了底层的支持,这些支持对于创建和管理图形界面来说至关重要。下面是一些 QtGui
模块提供的主要功能:
-
绘图系统:
QPainter
、QPixmap
、QImage
和QPicture
等类允许开发者在屏幕上或任何其他设备上进行绘制。 -
字体处理:通过
QFont
和QFontMetrics
类来设置文本样式并测量其尺寸。 -
图像处理:支持多种图像格式的加载、保存及转换等操作。
-
事件机制:虽然具体的 GUI 事件通常由
QtWidgets
处理,但QtGui
定义了所有类型的事件,并且提供了基础的事件分发机制。 -
屏幕和显示器管理:包括多显示器支持等功能。
-
输入法框架:使得应用程序能够与系统输入法集成,从而更好地支持国际化的文本输入。
示例绘图(.h文件)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPoint>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *event) override;
private:
Ui::MainWindow *ui;
QPoint lastPoint;
bool scribbling;
};
#endif // MAINWINDOW_H
(.cpp文件)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, scribbling(false)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
lastPoint = event->pos();
scribbling = true;
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if ((event->buttons() & Qt::LeftButton) && scribbling) {
QPainter painter(this);
painter.setPen(QPen(Qt::black, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawLine(lastPoint, event->pos());
lastPoint = event->pos();
update(); // 触发 paintEvent 重绘
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton && scribbling) {
scribbling = false;
}
}
void MainWindow::paintEvent(QPaintEvent *event)
{
// 默认绘制行为
QWidget::paintEvent(event);
// 如果你希望保存绘制内容而不只是临时显示,
// 可以在这里实现更复杂的逻辑。
}
二、QtWidgets 模块
QtWidgets
模块则专注于提供一系列丰富的预定义用户界面组件,利用了 QtGui
提供的基础图形功能来构建更高级别的 UI 元素。
Qt 提供了丰富的标准控件,这些控件可以直接使用或作为自定义控件的基础。
-
QPushButton:按钮控件。
-
QCheckBox 和 QRadioButton:复选框和单选按钮。
-
QLineEdit 和 QTextEdit:文本输入控件。
-
QLabel:用于显示静态文本或图像。
-
QComboBox 和 QSpinBox:下拉列表和数字输入框。
-
QTreeView、QTableView 和 QListView:展示复杂数据结构的视图。
-
QProgressBar:进度条。
-
QSlider:滑块控件。
绘制与样式
Qt 提供了强大的绘图和样式功能,允许开发者创建美观的界面。
-
QPainter:提供了低级别的绘画功能,可以用来绘制形状、线条、文本等。
-
QStyle 和 QPalette:通过修改样式表(style sheets)或调色板(palette),您可以很容易地改变应用程序的整体外观而不必更改代码。
-
QSS (Qt Style Sheets):类似于 CSS,允许您通过样式表来定制控件的外观。
开发工具
-
Qt Designer:一个可视化的设计工具,可以帮助快速创建复杂的用户界面而无需手动编写代码。可以联合其他的IDE进行开发,比如vs、pycharm,(不过例如使用pycharm时需要其他的工具转换设计生成的ui文件)
-
qmake:构建系统,简化项目配置过程。
-
Qt Creator:集成开发环境(IDE),包含代码编辑器、调试器、项目管理器等功能。(其中有专门拖拽控件的设计界面)