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 *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)
可以看成是一个动作,连接到槽
QAction(const QString &text, QObject *parent = nullptr)
设置快捷键
void QAction::setShortcuts(const QList<QKeySequence> &shortcuts)
->setStatusTip(tr("Start a new game"));
设置说明用于打开文件选择窗口
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", //文件夹目录
tr("Images (*.png *.xpm *.jpg)"));
用于获取文件的相关信息,比如后缀名等等
QString extension = fileInfo.suffix().toLower(); // 获取小写的文件后缀名
文本流,用于读取数据
QTextStream::QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
QTextStream in(&file);
while(!in.atEnd()){
QString line = in.readLine(); // 读取一行
... // 逐行处理
}
file.close();
贴图,纹理
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)
//QPixmap bg(TILE_SIZE, TILE_SIZE);
QPainter p(&bg);
QPainter p(this);
void QPainter::drawEllipse(const QRectF &rectangle)
save 保存当前painter状态
restore 恢复
setRenderHint(QPainter::RenderHint hint, bool on = true)
设置绘画风格
比如
painter->setRenderHint(QPainter::Antialiasing);
//带有边缘
void QPainter::fillRect(const QRectF]&rectangle, const QBrush&brush)
Fills the given rectangle with the brush specified.
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等等
刷子,可以是纹理/颜色
style设置绘制的方式
pen.setStyle(Qt::DashDotLine);
pen.setWidth(3);
pen.setBrush(Qt::green);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
painter.setPen(pen)
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.
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调用
例子:
painter->save();
painter->setRenderHint(QPainter::Antialiasing);
painter->fillPath(shape(), Qt::red);
painter->restore();
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相关逻辑
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.
碰撞检测
QList<QGraphicsItem*> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
可用之前设置的data判断与哪个物体的碰撞
//用于图形存放
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)
实现拦截处理函数
例子
if (event->type() == QEvent::KeyPress) {
handleKeyPressed((QKeyEvent *)event); //自定义的按键处理函数
return true;//返回已处理
} else {
return QObject::eventFilter(object, event);
//不处理
}
QGraphicsView(scene, this);
void fitInView(QRect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio);
缩放视图矩阵并滚动滚动条,以确保场景矩形(rect
)适应视口内
setBackgroundBrush(QBrush(QPixmap)); //设置背景