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)
-
设置快捷键
void QAction::setShortcuts(const QList<QKeySequence> &shortcuts)
->setStatusTip(tr("Start a new game"));
设置说明- ->setEnabled(false) 设置按钮激活状态
- connect(aboutAction, &QAction::triggered, this, &MainWindow::about);
文件交互
QFileDialog类
用于打开文件选择窗口
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", //文件夹目录
tr("Images (*.png *.xpm *.jpg)"));
QFileInfo类
用于获取文件的相关信息,比如后缀名等等
QString extension = fileInfo.suffix().toLower(); // 获取小写的文件后缀名
QFile类
- QFile(QString filename, QObject *parent*);
- .setFileName(filePath);
QTextStream
文本流,用于读取数据
QTextStream::QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
QTextStream in(&file);
- 逐行读取
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)
例如
//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)
设置绘画风格
比如
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等等
QBrush类
刷子,可以是纹理/颜色
style设置绘制的方式
QPen类
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调用
例子:
painter->save();
painter->setRenderHint(QPainter::Antialiasing);
painter->fillPath(shape(), Qt::red);
painter->restore();
- (virtual) QPainterPath shape()const
例子:
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类
//用于图形存放
-
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);
//不处理
}
- connect(&timer, SIGNAL(timeout()), &scene, SLOT(advance()));
用于定时刷新界面
QGraphicsView类
-
QGraphicsView(scene, this);
-
void fitInView(QRect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio);
缩放视图矩阵并滚动滚动条,以确保场景矩形(rect
)适应视口内 -
setBackgroundBrush(QBrush(QPixmap)); //设置背景
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!