按下 QDialog Cancel 或 OK 时如何调用函数?
How to call a function when QDialog Cancel or OK is pressed?
我正在做 QDialog
中的 3 个选项卡。然后将 2 个小部件和 1 个 QDialog 添加到 3 个选项卡。
我已经调用了 QDialog::accept
和 QDialog::reject
。但是我想调用自定义方法,并且在调用它们时应该将对话框屏幕重置为列表框选择屏幕。我的代码如下:
BTSettingsTab::BTSettingsTab(const QFileInfo &fileInfo, QWidget *parent)
: QDialog(parent)
{
...........
.............
QLabel *topLabel = new QLabel(tr("Choose setting :"));
QListWidget *settingsListBox = new QListWidget;
QStringList settings;
/*for (int i = 1; i <= 30; ++i)
applications.append(tr("Application %1").arg(i));
applicationsListBox->insertItems(0, applications);*/
settings.append(tr("newConfiguration:"));
settings.append(tr("Edit Configuration:"));
settings.append(tr("Delete Configuration:"));
settings.append(tr("add current location to turnoff Places:"));
settings.append(tr("temporarily turnoff distance:"));
settings.append(tr("temporarily turn off turnoff places:"));
settings.append(tr("factory reset:"));
settings.append(tr("turn on distance:"));
settings.append(tr("turn on turnoff places:"));
settings.append(tr("exit"));
settingsListBox->insertItems(0,settings);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(topLabel);
layout->addWidget(settingsListBox);
layout->addWidget(buttonBox);
setLayout(layout);
}
我看到了你的post。谢谢。我实现了重载函数并且断点命中它们。我得到了 selected item.I used QString * curr = settingsListBox->currentItem()->text();
的行号
现在我该如何开始新的 window?
方法 QDialog::accept
和 QDialog::reject
是虚拟的,因此可以在您的自定义对话框中覆盖它们(在您的情况下 - BTSettingsTab
继承自 QDialog
)。
如果您想 替换 accept
和 reject
的行为 - 只需在覆盖方法中实现您想要的行为。或者您可以实现自己的方法 BTSettingsTab::_OnAccept()
和 _OnReject()
并将按钮连接到它们,而不是将它们连接到 QDialog::accept
和 reject
.
如果你想添加你的自定义行为到默认QDialog
的行为 - 最后分别调用QDialog::accept()
和QDialog::reject
重载版本的数量。
我正在做 QDialog
中的 3 个选项卡。然后将 2 个小部件和 1 个 QDialog 添加到 3 个选项卡。
我已经调用了 QDialog::accept
和 QDialog::reject
。但是我想调用自定义方法,并且在调用它们时应该将对话框屏幕重置为列表框选择屏幕。我的代码如下:
BTSettingsTab::BTSettingsTab(const QFileInfo &fileInfo, QWidget *parent)
: QDialog(parent)
{
...........
.............
QLabel *topLabel = new QLabel(tr("Choose setting :"));
QListWidget *settingsListBox = new QListWidget;
QStringList settings;
/*for (int i = 1; i <= 30; ++i)
applications.append(tr("Application %1").arg(i));
applicationsListBox->insertItems(0, applications);*/
settings.append(tr("newConfiguration:"));
settings.append(tr("Edit Configuration:"));
settings.append(tr("Delete Configuration:"));
settings.append(tr("add current location to turnoff Places:"));
settings.append(tr("temporarily turnoff distance:"));
settings.append(tr("temporarily turn off turnoff places:"));
settings.append(tr("factory reset:"));
settings.append(tr("turn on distance:"));
settings.append(tr("turn on turnoff places:"));
settings.append(tr("exit"));
settingsListBox->insertItems(0,settings);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(topLabel);
layout->addWidget(settingsListBox);
layout->addWidget(buttonBox);
setLayout(layout);
}
我看到了你的post。谢谢。我实现了重载函数并且断点命中它们。我得到了 selected item.I used QString * curr = settingsListBox->currentItem()->text();
的行号现在我该如何开始新的 window?
方法 QDialog::accept
和 QDialog::reject
是虚拟的,因此可以在您的自定义对话框中覆盖它们(在您的情况下 - BTSettingsTab
继承自 QDialog
)。
如果您想 替换 accept
和 reject
的行为 - 只需在覆盖方法中实现您想要的行为。或者您可以实现自己的方法 BTSettingsTab::_OnAccept()
和 _OnReject()
并将按钮连接到它们,而不是将它们连接到 QDialog::accept
和 reject
.
如果你想添加你的自定义行为到默认QDialog
的行为 - 最后分别调用QDialog::accept()
和QDialog::reject
重载版本的数量。