He subclase QDialog
para implementar una funcionalidad similar a QMessageBox
(necesitaba esto para permitir la personalización). Tiene un mensaje de texto y botones Aceptar, Cancelar. Estoy mostrando el cuadro de diálogo usando exec()
para bloquearlo. Ahora, ¿cómo devuelvo los valores de verdadero/falso cuando el usuario hace clic en Aceptar/Cancelar?QDialog exec() y obteniendo el valor de resultado
traté de conectar los botones para setResult()
y luego, devuelva el valor del resultado cuando se hace clic, pero 1. Al hacer clic en los botones no se cierra el cuadro de diálogo 2. El valor devuelto es incorrecto. A continuación se encuentra el código que he escrito. Creo que estoy equivocado en la parte de ejecución/resultado, pero no estoy seguro de cómo solucionarlo.
class MyMessageBox : public QDialog
{
Q_OBJECT
private slots:
void onOKButtonClicked(){ this->setResult(QDialog::Accepted);}
void onCancelButtonClicked(){ this->setResult(QDialog::Rejected);}
public:
MyMessageBox(QMessageBox::Icon icon, const QString & title, const QString & text, bool showCancelButton = true, QWidget *parent = 0);
virtual void resizeEvent(QResizeEvent* e);
QDialog::DialogCode showYourself()
{
this->setWindowModality(Qt::ApplicationModal);
this->exec();
return static_cast<QDialog::DialogCode>(this->result());
}
};
El usuario tendrá una instancia de la clase y llamar showYourself() que se espera para devolver el valor y también cerca (y eliminar) el diálogo.
He publicado el código parcial. Avíseme si necesita más y publicaré la versión completa.
¡Gracias! Eso es iluminador. Si hago esto, ¿necesito eliminar explícitamente el objeto o me ocupo de ello internamente? – go4sri
si el objeto tiene un padre, se elimina cuando se elimina el padre. Puede usar 'QObject :: deleteLater()' para programar una eliminación. Cuando sepa con certeza que ya no se usa un objeto (no hay ningún evento relacionado con este objeto que esté flotando), puede usar la buena eliminación anterior. – UmNyobe
muy buena respuesta! ¡gracias! – Victor