Russian Qt Forum

Qt => Вопросы новичков => Тема начата: lioncub от Март 27, 2011, 13:32



Название: QMessageBox в QGraphicsScene
Отправлено: lioncub от Март 27, 2011, 13:32
Как в классе основаном на базовом классе QGraphicsScene заставить работать QMessageBox?
По двойному клику (не важно по какому событию) должен вылезти  QMessageBox, но при компиляции выходит ошибка:
Код:
../scene/scene.cpp: In member function ‘virtual void Scene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent*)’:
../scene/scene.cpp:13: error: no matching function for call to ‘QMessageBox::warning(Scene* const, QString, QString)’
/usr/include/qt4/QtGui/qmessagebox.h:199: note: candidates are: static QMessageBox::StandardButton QMessageBox::warning(QWidget*, const QString&, const QString&, QFlags<QMessageBox::StandardButton>, QMessageBox::StandardButton)
/usr/include/qt4/QtGui/qmessagebox.h:247: note:                 static int QMessageBox::warning(QWidget*, const QString&, const QString&, int, int, int)
/usr/include/qt4/QtGui/qmessagebox.h:250: note:                 static int QMessageBox::warning(QWidget*, const QString&, const QString&, const QString&, const QString&, const QString&, int, int)
/usr/include/qt4/QtGui/qmessagebox.h:257: note:                 static int QMessageBox::warning(QWidget*, const QString&, const QString&, QMessageBox::StandardButton, QMessageBox::StandardButton)
../scene/scene.cpp: At global scope:
../scene/scene.cpp:10: warning: unused parameter ‘event’
make: *** [scene.o] Ошибка 1
Есть вот такой код:
mainwindow.cpp:
Код:
#include <QtGui>

#include "mainwindow.h"
#include "scene.h"

MainWindow::MainWindow()
{
    scene = new Scene;
    view = new QGraphicsView(scene);
    view->setScene(scene);
    QTabWidget *tab = new QTabWidget;
    tab->setMinimumSize(300,200);
    tab->insertTab(1,view,"Tab1");
    setCentralWidget(tab);
}

MainWindow::~MainWindow()
{
}
scene.cpp:
Код:
#include <QtGui>
#include "scene.h"

Scene::Scene(QObject *parent) :
    QGraphicsScene(parent)
{

}

void Scene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
    QMessageBox::warning(this, tr("Message"),
                                tr("This Message!"));
}
Важно чтоб QMessageBox был в QGraphicsScene, могу хидеры выложить.


Название: Re: QMessageBox в QGraphicsScene
Отправлено: merke от Март 27, 2011, 14:22
Ошибка в том, что ты не правильно вызываешь функцию месаджбокса. Первым параметром должен быть указатель на виджет, а сцена не является виджетом. Могу и ошибаться.


Название: Re: QMessageBox в QGraphicsScene
Отправлено: lioncub от Март 27, 2011, 14:28
Даже если тип класа у Scene объявлю как
Код:
Scene::Scene(QWidget *parent) :
    QGraphicsScene(parent)
та же ошибка.


Название: Re: QMessageBox в QGraphicsScene
Отправлено: merke от Март 27, 2011, 15:10
Вызови по такому шаблону
Код:
static int QMessageBox::warning(QWidget*, const QString&, const QString&, const QString&, const QString&, const QString&, int, int)


Название: Re: QMessageBox в QGraphicsScene
Отправлено: merke от Март 27, 2011, 15:14
Или укажи вместо this 0


Название: Re: QMessageBox в QGraphicsScene
Отправлено: lioncub от Март 27, 2011, 15:21
спасибо, с "0" - работает....


Название: Re: QMessageBox в QGraphicsScene
Отправлено: Sergey B. от Март 27, 2011, 17:06
QMessageBox ( QWidget * parent = 0 )

QGraphicsScene ( QObject * parent = 0 )