QT GUI代码大全(MainWindow, QFile, QPainter, QGraphicsItem/Scene/View)

文章目录

窗口设置

QMainWindow类

  • QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

  • void setCentralWidget(QWidget *widget); //set the given widget to the main window's central widget

  • void setFixedSize(int w, int h); //set the size of the widget

  • void setWindowIcon(QIcon(QString filepath));

按钮和菜单

QMenuBar类

  • QMenuBar *QMainWindow::menuBar() const

    返回MainWindow的menu bar

    //creates and returns an empty menu bar if the menu bar does not exist.

  • QMenuBar::addMenu(QMenu *menu)

  • QMenuBar::addMenu(const QString& title)

QMenu类

  • addAction(QAction *action)
  • addSeparator()

QAction类

可以看成是一个动作,连接到槽

  • QAction(const QString &text, QObject *parent = nullptr)

  • 设置快捷键

c 复制代码
void QAction::setShortcuts(const QList<QKeySequence> &shortcuts)
  • ->setStatusTip(tr("Start a new game")); 设置说明
  • ->setEnabled(false) 设置按钮激活状态
  • connect(aboutAction, &QAction::triggered, this, &MainWindow::about);

文件交互

QFileDialog类

用于打开文件选择窗口

c 复制代码
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),                                       "/home",  //文件夹目录
tr("Images (*.png *.xpm *.jpg)"));

QFileInfo类

用于获取文件的相关信息,比如后缀名等等

c 复制代码
QString extension = fileInfo.suffix().toLower();  // 获取小写的文件后缀名

QFile类

  • QFile(QString filename, QObject *parent*);
  • .setFileName(filePath);

QTextStream

文本流,用于读取数据

QTextStream::QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

c 复制代码
QTextStream in(&file);
  • 逐行读取
c 复制代码
while(!in.atEnd()){
    QString line = in.readLine(); // 读取一行
     ... // 逐行处理
    }
    file.close();

绘图

QPixmap类

贴图,纹理

  • QPixmap::QPixmap(int width, int height)

    //注释:上面尚未fill with color

  • QPixmap::QPixmap(const QString &fileName, const char *format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor)

  • void QPixmap::fill(const QColor &color = Qt::white)

QPainter类

  • QPainter(QPaintDevice *device)
    例如
c 复制代码
//QPixmap bg(TILE_SIZE, TILE_SIZE);
QPainter p(&bg);
QPainter p(this);
  • setBrush(const QBrush)
  • setPen(QPen)
  • drawRect(int x, int y, int width, int height);
  • drawLine
  • drawPath(const QPainterPath &path) //current pen
  • void QPainter::drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)

void QPainter::drawEllipse(const QRectF &rectangle)

  • save 保存当前painter状态

  • restore 恢复

  • setRenderHint(QPainter::RenderHint hint, bool on = true)

    设置绘画风格

    比如

c 复制代码
painter->setRenderHint(QPainter::Antialiasing);
//带有边缘

void QPainter::fillRect(const QRectF]&rectangle, const QBrush&brush)

Fills the given rectangle with the brush specified.

text 复制代码
Alternatively, you can specify a QColor instead of a QBrush; the QBrush constructor (taking a QColor argument) will automatically create a solid pattern brush.

相应有 fillPath等等

QBrush类

刷子,可以是纹理/颜色

style设置绘制的方式

QPen类

c 复制代码
  pen.setStyle(Qt::DashDotLine);
  pen.setWidth(3);
  pen.setBrush(Qt::green);
  pen.setCapStyle(Qt::RoundCap);
  pen.setJoinStyle(Qt::RoundJoin);
  painter.setPen(pen)

QPainterPath类

  • addRect等等

  • clear

  • boundingRect

  • capacity vs length

  • connectPath(&path)

  • contains(QPoint/QRect/QPainterPath)

  • 对应的intersect(相交),而contain是包含(区域)

  • lineTo

  • cubicTo 画线

0 moveTo

Moves the current position to (x, y) and starts a new subpath, implicitly closing the previous path.

游戏场景

QGraphicsItem类

  • setPos(x, y);

  • setData(int key, const QVariant &value);

    使用:serData(GD_Type, GO_Food);

  • QRectF QGraphicsItem::boundingRect() const;

    自定义,原虚函数

    返回Item的边界

    例子:return QRectF(-TILE_SIZE, -TILE_SIZE, TILE_SIZE * 2, TILE_SIZE * 2 );

  • (pure virtual) void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

    原虚函数,被QGraphicsView调用

    例子:

c 复制代码
painter->save();
painter->setRenderHint(QPainter::Antialiasing);
painter->fillPath(shape(), Qt::red);
painter->restore();
  • (virtual) QPainterPath shape()const
    例子:
c 复制代码
QPainterPath p;
p.addEllipse(QPointF(TILE_SIZE / 2, TILE_SIZE / 2), FOOD_RADIUS, FOOD_RADIUS);
    return p;
  • QPointF mapFromScene(const QPointF &point) const

    将Scene坐标系中的坐标映射到本Item坐标系中的点坐标

  • void QGraphicsItem::advance(int phase)

    phase = 0 预更新

    phase = 1 更新

    用于更新Item相关逻辑

c 复制代码
void Snake::advance(int step)
{
    if (!step) {
        return;
    }
    if (tickCounter++ % speed != 0) {
        return;
    }
    if (moveDirection == NoMove) {
        return;
    }
    if (growing > 0) {
		QPointF tailPoint = head;
        tail << tailPoint;
        growing -= 1;
    } else {
        tail.removeFirst();
        tail << head;
    }
    switch (moveDirection) {
        case MoveLeft:
            moveLeft();
            break;
        case MoveRight:
            moveRight();
            break;
        case MoveUp:
            moveUp();
            break;
        case MoveDown:
            moveDown();
            break;
    }
    setPos(head);
    handleCollisions();
}
  • void QGraphicsItem::setPos(const QPointF &pos)

    Sets the position of the item to pos, which is in parent coordinates.

  • 碰撞检测

c 复制代码
QList<QGraphicsItem*> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const

可用之前设置的data判断与哪个物体的碰撞

QGraphicsScene类

//用于图形存放

  • QGraphicsScene(QObject* parent = nullptr);

    构造函数可用:

    ...scene(new QGraphicsScene(this));

  • setSceneRect(x, y, w, h);//设置scene的位置

    //使用实例:scene->setSceneRect(-100, -100, 200, 200);

  • void addItem(QGraphicsItem *item);

    void removeItem(QGraphicsItem *item);

  • void QObject::installEventFilter(QObject *filterObj);

    //设置事件过滤器, filterObj会拦截并处理this的实践

    例子: scene.installEventFilter(this);

  • (virtual)

    bool QObject::eventFilter(QObject *object, QEvent *event)

    实现拦截处理函数

    例子

c 复制代码
if (event->type() == QEvent::KeyPress) {
    handleKeyPressed((QKeyEvent *)event); //自定义的按键处理函数
    return true;//返回已处理
} else {
    return QObject::eventFilter(object, event);
    //不处理
    }
  • connect(&timer, SIGNAL(timeout()), &scene, SLOT(advance()));
    用于定时刷新界面

QGraphicsView类

  • QGraphicsView(scene, this);

  • void fitInView(QRect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio);

    缩放视图矩阵并滚动滚动条,以确保场景矩形(rect)适应视口内

  • setBackgroundBrush(QBrush(QPixmap)); //设置背景

相关推荐
重生之我是数学王子5 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
我们的五年28 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
做人不要太理性1 小时前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.1 小时前
2、桥接模式
c++·桥接模式
chnming19871 小时前
STL关联式容器之map
开发语言·c++
程序伍六七1 小时前
day16
开发语言·c++
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
火山口车神丶2 小时前
某车企ASW面试笔试题
c++·matlab
是阿建吖!2 小时前
【优选算法】二分查找
c++·算法
Ajiang28247353044 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++