【问题标题】:Image on Qt QMdiArea backgroundQt QMdiArea 背景上的图像
【发布时间】:2013-11-08 06:01:51
【问题描述】:

Qt 开发者! 有没有办法在我的 midArea 的背景上添加图像,如下图所示?

我知道我可以使用这样的东西

QImage img("logo.jpg");
mdiArea->setBackground(img);

但我不需要在背景上重复我的图像。

谢谢!

【问题讨论】:

  • 也许您可以尝试覆盖QMdiArea::paintEvent() 并在那里绘制您的徽标像素图?
  • @vahancho 哦,好吧,你能举个例子吗?
  • 当然,请在下面我发布的答案中找到工作示例。

标签: image qt qt4 qmdiarea


【解决方案1】:

正如我在上面的评论中所说,您可以对QMdiArea 进行子类化,覆盖其paintEvent() 函数并自己绘制您的徽标图像(在右下角)。这是实现上述想法的示例代码:

class MdiArea : public QMdiArea
{
public:
    MdiArea(QWidget *parent = 0)
        :
            QMdiArea(parent),
            m_pixmap("logo.jpg")
    {}
protected:
    void paintEvent(QPaintEvent *event)
    {
        QMdiArea::paintEvent(event);

        QPainter painter(viewport());

        // Calculate the logo position - the bottom right corner of the mdi area.
        int x = width() - m_pixmap.width();
        int y = height() - m_pixmap.height();
        painter.drawPixmap(x, y, m_pixmap);
    }
private:
    // Store the logo image.
    QPixmap m_pixmap;
};

最后在主窗口中使用自定义mdi区域:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;
    QMdiArea *mdiArea = new MdiArea(&mainWindow);
    mainWindow.setCentralWidget(mdiArea);
    mainWindow.show();

    return app.exec();
}

【讨论】:

  • 哦,太好了,谢谢!有没有不编辑原始 qt 模块代码的方法?因为我有免费版本,据我所知,我不打算编辑这样的东西
  • @DanilGholtsman,实际上Qt源代码没有变化。我发布的示例代码应该是您自己的代码,您可以不受任何限制地这样做。
  • 哦,我明白了!有延长!我第一次看到它时,我有点分心,很抱歉这个问题很愚蠢._.
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
相关资源
最近更新 更多