Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 油漆工。划线_Qt_Qpainter - Fatal编程技术网

Qt 油漆工。划线

Qt 油漆工。划线,qt,qpainter,Qt,Qpainter,我在试图划清界限 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);

我在试图划清界限

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();
}

但是窗户上没有画。怎么了?

小部件只能在各自的绘制事件中绘制。您可以在任何函数中绘制pixmap,但需要在小部件绘制事件中显示结果

从文档:

警告:当paintdevice是小部件时,只能使用QPainter 在paintEvent()函数内部或在由调用的函数中 paintEvent();除非Qt::WA_PaintOutsidePaintEvent小部件 属性已设置


您不能在
paintEvent()
函数之外进行绘制,至少在Windows和Mac OS上是这样。但是,您可以重写
main窗口
class'
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();
    [..]

不能在绘制事件之外的小部件上绘制。但您可以随时在非小部件上绘制,例如在
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();
}

#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
qpicturepi;
QPainter p&pi;
p、 SetRenderInt(QPaint::抗锯齿);
p、 setPen(QPen(Qt::black,12,Qt::DashDotLine,Qt::RoundCap));
p、 抽绳(0,0,200,200);
p、 end();//别忘了这一行!
QLabel;
l、 设置图片(pi);
l、 show();
返回a.exec();
}