J'ai une application dans Qt qui écrase un arrêt au cas où un utilisateur n'a pas enregistré son document. Il ressemble à ceci:QtSingleApplication QMessageBox oui action est prise même si non est sélectionné
class MyApplication : public QtSingleApplication
{
public:
MyApplication(int argc, char *argv[]) : QtSingleApplication(argc, argv, true)
{
}
~MyApplication()
{
}
void commitData(QSessionManager &manager)
{
if(manager.allowsInteraction())
{
main->RequestShutdownOverride();
}
}
void SetMainWindow(MainWindow *m)
{
main = m;
}
MainWindow *main;
};
void MainWindow::RequestShutdownOverride()
{
if(myDocument->hasChanges() == true)
{
switch
(
QMessageBox::warning
(
NULL,
"Foobar",
"You are exiting without saving. Would you like to save?",
"Yes, save my document", "No, don't save my document",
0,
0,
1
)
)
{
case 0:
myDocument->save();
break;
case 1:
app->exit(0);
break;
}
}
}
Le problème est pour un couple d'utilisateurs, ils vont fermer, la fermeture est surchargée cliquent sur « non » et il enregistre le document de toute façon. J'ai essayé de dépanner ce code et je ne trouve rien d'évident, et pire - si je crée mon propre profil sur leur machine, cela fonctionne à nouveau correctement.
Y at-il quelque chose que j'ai foiré dans le code, ou pourrait-il y avoir quelque chose d'autre qui le cause? J'ai essayé de changer les versions de Qt. La seule autre chose que ces deux utilisateurs semblent avoir en commun est qu'ils utilisent tous les deux Windows Vista, mais d'autres utilisent Vista et n'ont pas signalé ce problème. Des idées?
EDIT
J'utilise cette définition:
static int QMessageBox::warning
(
QWidget *parent,
const QString &title,
const QString &text,
const QString &button0Text,
const QString &button1Text = QString(),
const QString &button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1
)
Il s'est avéré être un logiciel malveillant. Nous avons créé un nouveau profil pour l'utilisateur et tout fonctionne à nouveau. Merci à tous pour votre aide, mais il semble que ce n'est pas un problème de programmation après tout. – jjacksonRIAB
S'il vous plaît, * s'il vous plaît *, utilisez les énumérations fournies par la classe 'QMessageBox' au lieu de 0 et 1, cela vous évitera des tonnes de maux de tête dans le futur! – Ivo