Russian Qt Forum
Ноябрь 23, 2024, 00:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMessageBox в QGraphicsScene  (Прочитано 4998 раз)
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, могу хидеры выложить.
Записан
merke
Гость
« Ответ #1 : Март 27, 2011, 14:22 »

Ошибка в том, что ты не правильно вызываешь функцию месаджбокса. Первым параметром должен быть указатель на виджет, а сцена не является виджетом. Могу и ошибаться.
Записан
lioncub
Гость
« Ответ #2 : Март 27, 2011, 14:28 »

Даже если тип класа у Scene объявлю как
Код:
Scene::Scene(QWidget *parent) :
    QGraphicsScene(parent)
та же ошибка.
Записан
merke
Гость
« Ответ #3 : Март 27, 2011, 15:10 »

Вызови по такому шаблону
Код:
static int QMessageBox::warning(QWidget*, const QString&, const QString&, const QString&, const QString&, const QString&, int, int)
Записан
merke
Гость
« Ответ #4 : Март 27, 2011, 15:14 »

Или укажи вместо this 0
Записан
lioncub
Гость
« Ответ #5 : Март 27, 2011, 15:21 »

спасибо, с "0" - работает....
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #6 : Март 27, 2011, 17:06 »

QMessageBox ( QWidget * parent = 0 )

QGraphicsScene ( QObject * parent = 0 )


Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.