我在试着划清界限。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QPainter painter(&w);
painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
painter.drawLine(0, 0, 200, 200);
return a.exec();
}但是窗子上什么画都没有。怎么啦?
发布于 2014-07-10 17:01:18
您不能在paintEvent()函数之外进行绘制,至少在Windows和Mac上是如此。但是,您可以覆盖MainWindow类的paintEvent()函数来在那里画线。例如:
class Widget : public QWidget
{
protected:
void paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
painter.drawLine(0, 0, 200, 200);
}
};和用法:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Widget w;
w.show();
[..]发布于 2014-07-16 05:29:00
不能在paint事件之外的小工具上进行绘制。但您可以随时在非窗口小部件上进行绘制,例如在QImage、QPixmap或QPicture上

#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPicture pi;
QPainter p(&pi);
p.setRenderHint(QPainter::Antialiasing);
p.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
p.drawLine(0, 0, 200, 200);
p.end(); // Don't forget this line!
QLabel l;
l.setPicture(pi);
l.show();
return a.exec();
}发布于 2014-07-10 16:52:43
小工具只能在其各自的paint事件中绘制。您可以在任何函数中的像素图上绘制,但需要在小部件paint事件中显示结果。
从文档中:
警告:当paintdevice是小部件时,QPainter只能在paintEvent()函数内或在paintEvent()调用的函数中使用;除非设置了Qt::WA_PaintOutsidePaintEvent小部件属性。
https://stackoverflow.com/questions/24672146
复制相似问题