[英]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.