2016-02-23 4 views
0

Я относительно новичок в Qt. У меня есть следующий фрагмент кода в функции (которая в определенный пользователем класс, унаследованный от QObject):QMessageBox :: Ok не отвечает за щелчки мышью на кнопке Ok

QMessageBox msgBox; 

msgBox.setText("Try clicking Ok button."); 
int ret = msgBox.exec(); 

qDebug() << "Return Val:" << ret; 

switch (ret) 
{ 
    case QMessageBox::Ok: 
    { 
     qDebug()<<"Ok button clicked"; 
     break; 
    } 

    default: 
    { 
     qDebug()<<"Control Should Not Reach this log"; 
     break; 
    } 
} 

После выполнения этого кода, QMessageBox с Ok кнопки выскакивает. Я не могу нажать на Ok кнопку с помощью мыши, хотя с помощью клавиш клавиатуры я могу это сделать. Независимо от того, пользуюсь ли я клавиатурой или использую Close (с использованием клавиатуры или мыши). Я всегда получаю возвращаемое значение 1024, которое является не чем иным, как QMessageBox::Ok. Вот почему в журнале всегда «Ok нажал кнопку« ».

  1. Почему я получаю только 1024в качестве возвращаемого значения?
  2. Есть ли что-то, что можно было бы предотвратить, щелкнув мышью на QMessageBox с Ok кнопка?

ответ

1

Документы (для Qt4) говорят

QMessageBox::QMessageBox (QWidget * parent = 0) 

Constructs a message box with no text and no buttons. 

Даже если они отображаются кнопки, вероятно, из того здесь. Попробуйте другой конструктор, используйте setStandardButtons(), или используйте один из статических методов как QMessageBox::information(), который в большинстве случаев - это все, что вам нужно.

+0

статические для победы –

0

Я нашел проблему. При объявлении msgBox было дано parent. Как только я дал родителям, он начал нормально работать. Хотя я не уверен, как это влияет только на кнопку Ok, но не на кнопку close. Спасибо.