我在界面的右上角使用方法closeEvent
作为X按钮。
要求是:
但是当我点击“取消”时,两个窗口都关闭了 - >如何解决这个问题?
如何在“保存”和“关闭”之间移动“取消”按钮
这是我的代码
myclass.h
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QcgDatabase* db, int hostid, QWidget *parent = 0);
~MyClass();
public slots:
void save_clicked();
private:
Ui::MyClass ui;
QMessageBox* dialog = NULL;
void closeEvent(QCloseEvent *bar);
};
myclass.cpp
MyClass::MyClass(QcgDatabase * db, int hostid, QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
.......
.......
}
void MyClass::closeEvent(QCloseEvent *bar)
{
if (!dialog) {
dialog = new QMessageBox(this);
}
dialog->setWindowModality(Qt::WindowModal);
dialog->setWindowTitle(QLatin1String("Exit"));
dialog->setText(QLatin1String("You have not saved data. Click \"Close\" to close the data table."));
dialog->setStandardButtons(QMessageBox::Save | QMessageBox::Cancel | QMessageBox::Close);
int result = dialog->exec();
if (result == QMessageBox::Save) {
save_clicked();
}
else if (result == QMessageBox::Cancel) {
dialog->close();
return;
}
else if (result == QMessageBox::Close) {
dialog->close();
}
bar->accept();
}
编辑:
好的,我用窗口修复了问题:
else if (result == QMessageBox::Cancel) {
bar->ignore();
return;
}
请帮我换掉“关闭”和“取消”按钮的位置!
答案 0 :(得分:3)
在if (result == QMessageBox::Cancel)
分支中,仅关闭对话框是不够的。您还需要在事件对象上调用QEvent::ignore()
:
bar->ignore()
这是因为你的MyClass::closeEvent
被调用只是为了让你有机会在窗口即将关闭时做一些事情,但事件本身将继续在Qt框架的迷宫中旅行,最终将导致窗口成为已关闭 - 除非您将其标记为被忽略