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
C++ Qt显示按钮位于图像顶部_C++_Qt - Fatal编程技术网

C++ Qt显示按钮位于图像顶部

C++ Qt显示按钮位于图像顶部,c++,qt,C++,Qt,我需要在图像顶部显示一个按钮。类似于 背景是QPixmap/QImage,按钮是QPushbutton。我需要能够动态更改图像-因此我不确定样式表是否适合此任务。我试过了,但没能成功 有什么解决办法吗 子类QWidget并实现paintEent,在这里您可以在背景上绘制图像。也可以通过样式表设置和更改背景图像 将带有按钮的布局添加到此小部件 有这样的东西: class WidgetWithButton : public QWidget { Q_OBJECT QImage m_bgI

我需要在图像顶部显示一个按钮。类似于

背景是QPixmap/QImage,按钮是QPushbutton。我需要能够动态更改图像-因此我不确定样式表是否适合此任务。我试过了,但没能成功

有什么解决办法吗

  • 子类QWidget并实现paintEent,在这里您可以在背景上绘制图像。也可以通过样式表设置和更改背景图像
  • 将带有按钮的布局添加到此小部件
  • 有这样的东西:

    class WidgetWithButton
      : public QWidget
    {
      Q_OBJECT
      QImage m_bgImage;
    public:
      WidgetWithButton(QWidget* aParent)
        : QWidget(aParent)
      {
        QHBoxLayout* l = new QHBoxLayout(this);
        QPushButton* myButton = new QPushButton(tr("Close"));
        l->addWidget( myButton, 0, Qt::AlignCenter );
      }
      void setImage(const QImage& aImage)
      {
        m_image = aImage;
        update();
      }
    protected:
      virtual void paintEvent(QPaintEvent* aPainEvent)
      {
        if (m_image.isValid())
        {
          QPainter painter(this);
          painter.drawImage(rect(), m_image);
        }
        else
          QWidget::paintEvent(aPainEvent);
      }
    };
    

    工作起来很有魅力。非常感谢。