2016-11-09 12 views
0

私は、TableView、カスタムモデル(QAbstractTableModel子孫)、およびアイコンをセル内に作成しています。まず、私はアイコンキャッシュを作ろうとしましたが、テーブルを持つメインウィンドウをフルスクリーンに展開しながら、アクセス違反(アドレス0x0)に入ります。別の2機の問題でQt :: DecorationRoleのアイコン - クラッシュを引き起こします

Qtのバージョン5.5.1

のWindows 8.1である

再現可能ではありません。 同じ.exeファイルを使用すると、ターゲットマシン上でAVが発生し、別の2台でokを実行できます。

私は間違っていますか?問題の原因をデバッグする方法は?

は、私は問題を再現しようとした最も簡単なアプリケーションを作りました:

mainwindow.h:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QAbstractTableModel> 
#include <QFileIconProvider> 

namespace Ui { 
class MainWindow; 
} 

class SimpleTableModel : public QAbstractTableModel 
{ 
public: 
    QFileIconProvider iconProvider; 

    int rowCount(const QModelIndex &parent) const; 
    int columnCount(const QModelIndex &parent) const; 
    QVariant data(const QModelIndex &index, int role) const; 
}; 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::MainWindow *ui; 
    SimpleTableModel model; 
}; 

#endif // MAINWINDOW_H 

mainwindow.cpp:

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

#include "filetypeiconprovider.h" 

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

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 
    ui->tableView->setModel(&model); 
} 

int SimpleTableModel::rowCount(const QModelIndex &parent) const 
{ 
    return 100; 
} 

int SimpleTableModel::columnCount(const QModelIndex &parent) const 
{ 
    return 5; 
} 

QVariant SimpleTableModel::data(const QModelIndex &index, int role) const 
{ 
    if (!index.isValid()) 
     return QVariant(); 


    switch(role){ 
     case Qt::DisplayRole: 
      return QString("qwe"); 
      break; 

     case Qt::BackgroundRole: 
      if (index.row() % 2) 
       return QBrush(QColor(0xfcf2fb)); 
      else 
       return QBrush(0xfcfcf2); 

      break; 

     case Qt::DecorationRole: 
      //if (index.column() == 0) 
       { 
        QIcon icon; 
        QFileInfo fileInfo("e:\\ss_source\\youcam-tutorial.exe"); 
        icon = iconProvider.icon(fileInfo); 

        return icon; 

       } 
      break; 

     } 

    return QVariant(); 
} 

このコードの結果でプログラムウィンドウを3倍にして全画面表示にしながら違反にアクセス:

c:\work\build\qt5_workdir\w\s\qtbase\src\gui\painting\qtransform.cpp:2047: ошибка: Exception at 0x5dd991fc, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance) 

スタックトレースがある:

1 QTransform::type qtransform.cpp 2047 0x5dd991fc 
2 QRasterPaintEngine::drawImage qpaintengine_raster.cpp 2202 0x5dd1206b 
3 QRasterPaintEngine::drawPixmap qpaintengine_raster.cpp 2052 0x5dd119bb 
4 QPainter::drawPixmap qpainter.cpp 5196 0x5dd2dfe2 
5 QPainter::drawPixmap qpainter.h 774 0x5da1ee2d 
6 QPixmapIconEngine::paint qicon.cpp 178 0x5db21bfd 
7 QIcon::paint qicon.cpp 902 0x5db20a7c 
8 QCommonStyle::drawControl qcommonstyle.cpp 2186 0x5e46555b 
9 QWindowsStyle::drawControl qwindowsstyle.cpp 1864 0x5e4f1648 
10 QWindowsXPStyle::drawControl qwindowsxpstyle.cpp 2533 0x5e4da053 
11 QWindowsVistaStyle::drawControl qwindowsvistastyle.cpp 1470 0x5e4cb7e6 
12 QStyledItemDelegate::paint qstyleditemdelegate.cpp 414 0x5e79028e 
13 QTableViewPrivate::drawCell qtableview.cpp 923 0x5e7224ec 
14 QTableView::paintEvent qtableview.cpp 1480 0x5e71c983 
15 QWidget::event qwidget.cpp 8831 0x5e41004c 
16 QFrame::event qframe.cpp 540 0x5e5767e2 
17 QAbstractScrollArea::viewportEvent qabstractscrollarea.cpp 1200 0x5e617ef3 
18 QAbstractItemView::viewportEvent qabstractitemview.cpp 1686 0x5e6e73f2 
19 QAbstractScrollAreaPrivate::viewportEvent qabstractscrollarea_p.h 102 0x5e3bc678 
20 QAbstractScrollAreaFilter::eventFilter qabstractscrollarea_p.h 118 0x5e61b9d9 
21 QCoreApplicationPrivate::sendThroughObjectEventFilters qcoreapplication.cpp 1072 0x642d8b03 
22 QApplicationPrivate::notify_helper qapplication.cpp 3712 0x5e3c53f2 
23 QApplication::notify qapplication.cpp 3681 0x5e3c3575 
24 QCoreApplication::notifyInternal qcoreapplication.cpp 965 0x642d8247 
25 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 227 0x643f7b08 
26 QWidgetPrivate::sendPaintEvent qwidget.cpp 5625 0x5e41713f 
27 QWidgetPrivate::drawWidget qwidget.cpp 5569 0x5e416dea 
28 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5761 0x5e4174ca 
29 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
30 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
31 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
32 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
33 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
34 QWidgetPrivate::drawWidget qwidget.cpp 5619 0x5e4170e7 
35 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5761 0x5e4174ca 
36 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
37 QWidgetPrivate::drawWidget qwidget.cpp 5619 0x5e4170e7 
38 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5761 0x5e4174ca 
39 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
40 QWidgetPrivate::paintSiblingsRecursive qwidget.cpp 5748 0x5e4173f5 
41 QWidgetPrivate::drawWidget qwidget.cpp 5619 0x5e4170e7 
42 QWidgetBackingStore::doSync qwidgetbackingstore.cpp 1229 0x5e3d8359 
43 QWidgetBackingStore::sync qwidgetbackingstore.cpp 1033 0x5e3d6500 
44 QWidgetPrivate::syncBackingStore qwidget.cpp 1904 0x5e418e01 
45 QWidgetWindow::handleResizeEvent qwidgetwindow.cpp 705 0x5e444686 
46 QWidgetWindow::event qwidgetwindow.cpp 233 0x5e4434a4 
47 QApplicationPrivate::notify_helper qapplication.cpp 3716 0x5e3c540e 
48 QApplication::notify qapplication.cpp 3160 0x5e3c182e 
49 QCoreApplication::notifyInternal qcoreapplication.cpp 965 0x642d8247 
50 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 227 0x643f7b08 
51 QGuiApplicationPrivate::processGeometryChangeEvent qguiapplication.cpp 2067 0x5da648f7 
52 QGuiApplicationPrivate::processWindowSystemEvent qguiapplication.cpp 1593 0x5da64fbd 
53 QWindowSystemInterface::sendWindowSystemEvents qwindowsysteminterface.cpp 625 0x5da399d1 
54 QWindowsGuiEventDispatcher::sendPostedEvents qwindowsguieventdispatcher.cpp 84 0x63cc4d4d 
55 qt_internal_proc qeventdispatcher_win.cpp 416 0x64368a1b 
56 _InternalCallWinProc USER32  0x76458e71 
57 UserCallWinProcCheckWow USER32  0x764590d1 
58 DispatchMessageWorker USER32  0x7645a66f 
59 DispatchMessageW USER32  0x7645a6e0 
60 QEventDispatcherWin32::processEvents qeventdispatcher_win.cpp 818 0x6436946d 
61 QWindowsGuiEventDispatcher::processEvents qwindowsguieventdispatcher.cpp 74 0x63cc4c65 
62 QEventLoop::processEvents qeventloop.cpp 129 0x642d3fac 
63 QEventLoop::exec qeventloop.cpp 204 0x642d41b2 
64 QCoreApplication::exec qcoreapplication.cpp 1229 0x642d6872 
65 QGuiApplication::exec qguiapplication.cpp 1528 0x5da61848 
66 QApplication::exec qapplication.cpp 2977 0x5e3c1489 
67 main main.cpp 10 0x138435f 
68 WinMain qtmain_win.cpp 113 0x13a30ed 
69 __tmainCRTStartup crtexe.c 618 0x13a24cf 
70 WinMainCRTStartup crtexe.c 466 0x13a228d 
71 BaseThreadInitThunk KERNEL32  0x74c97c04 
72 __RtlUserThreadStart ntdll  0x773ead1f 
73 _RtlUserThreadStart ntdll  0x773eacea 
+0

'iconProvider.icon(fileInfo);'は有効なアイコンを返しますか? –

+0

'icon.isNull()'チェックを追加しましたが、何も変わりませんでした。この例ではアイコンが表示されているため、アイコンが有効です。ウィンドウがフルスクリーン表示になるまで表示されます。 – Elmy

+0

このマシンのフルスクリーンアプリケーションには他にも問題がありますか?他のPCで問題が再現できない場合は、コード/ qtの問題ではありません。 –

答えて

0

問題は、新しいQtのバージョンにコンパイルするときの両方bedugに5.6と5.7と同様に、ターゲット・マシン上で消失または放出と同じ32ビットまたは64ビットMS VS 2013を使用してコンパイラ。

関連する問題