2

我有一个QDialogfor 开始我的游戏。在这门课上我有一个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();
  }
 }
4

1 回答 1

1

不太确定您是否需要您的文本项目是“可编辑的” - 请参阅 Mitch 的评论...

似乎您需要您的项目是“可点击的” - 那么您所需要的只是一些标志:

text->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
于 2015-09-01T16:18:38.737 回答