QWebView を一度でも new すると、ヒープを580MB 消費する

プロジェクト (*.pro) に webkitwidgets を追加します

QT += webkitwidgets

QWebView を new し delete するコードを加えて、ヒープ残量を確認します。

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtWebKitWidgets>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 以下2行のコードの有無で、ヒープ残量が580MB 変化する
    QWebView* wv = new QWebView( this );
    delete wv;

    // ヒープの確認 (Check Heap Size)
    int s = 0;
    int len = 1000 * 1000 * 10;

    while (true)
    {
        void* ptr = malloc( len );
        if (ptr == NULL) break;

        memset( ptr, 128, len );
        s += 10;
    }

    setWindowTitle( QString::number(s) + " MB" );
}

QWebView の new,delete のコードがあると、960 MB。
コメントアウトすると、1540 MB と表示されます。

補足

Qt5.5.1 Windows/MinGW です

Qtアプリ (MinGW/32bit) が 何MB mallocできるか確かめてみた

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    // ここから
    int s = 0;
    int len = 1000 * 1000 * 10;

    while (true)
    {
        // 10MB ずつ確保して、失敗するまで続ける
        void* ptr = malloc( len );
        if (ptr == NULL) break;

        memset( ptr, 128, len );
        s += 10;
    }

    // 何MB 確保できた?
    setWindowTitle( QString::number(s) + " MB" );
}


LARGEADDRESSAWARE 無しです (念のため)。

ブラウザからのドラッグ&ドロップで、リンク先が優先される? (Qt5.4.1)

外部ブラウザ (ChromeやEdge) に表示されている画像をフォームにドラッグ&ドロップする際、Aタグが指定されていると、画像のURLでなくリンク先(Aタグ) のURLが飛んで来るような気がします。常にIMGタグのURLを取得できないものでしょうか……。

void SomeWidget::dropEvent( QDropEvent* event )
{
  const QMimeData* mime = event->mimeData();

  if (mime->hasUrls())
  {
    QList<QUrl> urls = mime->urls();
    for (int i=0; i<urls.size(); i++)
    {
      QUrl u = urls.at( i ); // IMGタグよりAタグが優先される?

グラフィックス読み物を執筆しました

売れてないようなので、皆さんよろしくお願いします……つらい。

2Dグラフィックスのしくみ ――図解でよくわかる画像処理技術のセオリー (WEB+DB PRESS plus)

2Dグラフィックスのしくみ ――図解でよくわかる画像処理技術のセオリー (WEB+DB PRESS plus)

http://gihyo.jp/book/2015/978-4-7741-7558-4 (WEB+DB PRESS plusシリーズ 2Dグラフィックスのしくみ

class template がビルドされない問題

ヘッダファイルに書いた class template をエディタで編集しても再コンパイルされない問題は、proファイル内で、

DEPENDPATH += ファイルのあるフォルダ

と指定してやると解決するようです (解決しました)。Qt勉強会 #26 で教えて頂きました。
http://qt5.jp/qt-meetup-26-tokyo-report.html

ドラッグ&ドロップ処理の悩み

  QDrag* drag = new QDrag( this );
  QMimeData *mimeData = new QMimeData();
  mimeData->setText( path );
  drag->setMimeData( mimeData );
  drag->setPixmap( iconPixmap );

  Qt::DropAction dropAction = drag->exec();

のような形でドラッグ&ドロップ処理を開始したものの、画面の範囲外などでマウスボタンを離すと、dropEvent は呼ばれません。ドラッグ開始で何かのトリガーを入れると、そのトリガーがキャンセルできず入ったままです。ドラッグ&ドロップを開始すると mouseReleaseEvent も呼ばれなくなるので、そちらでトリガーを解除するわけにも行かず、困っています。