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 と表示されます。
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" ); }
ブラウザからのドラッグ&ドロップで、リンク先が優先される? (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)
- 作者: FireAlpaca開発チーム
- 出版社/メーカー: 技術評論社
- 発売日: 2015/08/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
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 も呼ばれなくなるので、そちらでトリガーを解除するわけにも行かず、困っています。
DockWidgetだけど、常にFloating状態にしたい
QDockWidget::setFeatures( ... ) じゃ指定できなさそうです。