Как кликнуть QGraphicsTextItem?

У меня есть QDialog для начала моей игры. в этом классе у меня есть QGraphicsTextItem, Я хочу, чтобы это было кликабельно. Когда пользователь нажмет, начнется игра. Я делаю это, но не работаю.

class Mydialog_start:public QDialog
{ 
   Q_OBJECT
   public:
   explicit Mydialog_start(QWidget *parent = 0);  
   signals:   
   public slots:
   void on_play_clicked();
   void on_exit_clicked();
   private:
   QGraphicsScene* scene;
   QGraphicsView* view;
   QPixmap image;
   QBrush brush;
   QGraphicsTextItem* text;
   QFont font;
   const int x_size;
   const int y_size; 
};
Mydialog_start::Mydialog_start(QWidget *parent) :
 QDialog(parent),x_size(400),y_size(400)
{
  scene=new QGraphicsScene(this);
  view=new QGraphicsView(this);
  view->setScene(scene);
  scene->setSceneRect(0,0,x_size,y_size);
  image.load(":picture/image/background.jpg");
  image=image.scaled(x_size,y_size);
  brush.setTexture(image);
  scene->setBackgroundBrush(brush);
  font.setBold(true);
  font.setPointSize(40);
  font.setItalic(true);
  text=scene->addText("play",font);
  text->setDefaultTextColor(QColor("red"));
  text->setPos(100,300);
  this->setFixedSize(400,400);
  connect(text,SIGNAL(linkActivated(QString("play"))),this,SLOT(on_play_clicked()));
}
void Mydialog_start::on_play_clicked()
{
  accept();
}
void Mydialog_start::on_exit_clicked()
{
   reject();
}
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  MainWindow w; 
  Mydialog_start dialog;
  dialog.exec();
  if( dialog.exec()==QDialog::Accepted)
  {
    w.show();
  }
  else
  {
    w.close();
  }
 }

1 ответ

Решение

Не совсем уверен, нужен ли вам текстовый элемент для "редактирования" - см. Комментарий Митча...

Кажется, вам нужно, чтобы ваш элемент был "кликабельным" - тогда все, что вам нужно, это несколько флагов:

text->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
Другие вопросы по тегам