繁体   English   中英

QT绘画到小部件

[英]QT painting to widget

我正在学习QT5的乐趣,并且正在学习绘画2D游戏的小部件。 我一直在浏览大量的教程和文档,并希望从此处获得一些有关在哪里进行研究的信息。

据我了解,似乎只能在paintEvent函数中完成绘画。 我试图弄清楚如何制作它,以便可以根据键盘输入有条件地在小部件上绘制某些内容。 例如,如果要按a,则要打印“ alpha”,如果按b,则要打印“ beta”。

显然,我可以通过全局字符串变量来执行此操作,但是其他一些方式是什么呢? 我正在寻找执行此操作的正确QT方法,有什么建议吗? 您将如何实现以下伪代码?

void paintEvent(QPaintEvent*)
{
  QPainter painter(this);

  //painter.drawText(QPoint(100,100), "example");

 }


void keyPressEvent( QKeyEvent *k )
{
    QString temp = k->text();

    if(temp == "a") 
        //paint "alpha"
    if(temp == "b")
        //paint "beta"
}

提前致谢!

您应该使用QGraphicsScene 它比paintEvent更高级别,它具有许多方便的功能,如果您要绘制不完全琐碎的内容,则应使用它。

例如,在您的情况下,您需要将QGraphicsTextItem* text_item变量存储为类成员。 在初始化中,请执行以下操作:

text_item = scene->addText("initial text");

当您决定更改文本时,只需使用此对象:

text_item->setPlainText("new_text");

图形视图框架将为您重新绘制适当的区域。

这不是一个完整的示例。 您需要向小部件添加视图并初始化场景以完成这项工作。 请参阅Graphics View Framework页面以获取更多详细信息。

你几乎在那里。 您将使用成员变量,而不是全局变量。 我将这样编写您的keypress方法:

class MyWidget : public QWidget {
    protected:
        void paintEvent(QPaintEvent*);
        void keyPressEvent(QKeyEvent*);
    private:
        QString mText;
};

...

void MyWidget::keyPressEvent(QKeyEvent *k) {
    if(k->key() == Qt::Key_A)
        mText = "alpha";
    else if(k->key() == Qt::Key_B)
        mText = "beta";

    update();
}

使用key()将比魔术字符串比较安全得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM