按下 QDialog Cancel 或 OK 时如何调用函数?

Posted

技术标签:

【中文标题】按下 QDialog Cancel 或 OK 时如何调用函数?【英文标题】:How to call a function when QDialog Cancel or OK is pressed? 【发布时间】:2017-08-07 03:34:35 【问题描述】:

我正在处理来自QDialog 的 3 个标签。然后将 2 个小部件和 1 个 QDialog 添加到 3 个选项卡。 我打电话给QDialog::acceptQDialog::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);

我看到了你的帖子。谢谢。我实现了重载函数并断点命中它们。我得到了所选项目的行号。我使用了 QString * curr = settingsListBox->currentItem()->text();

现在我如何启动一个新窗口?

【问题讨论】:

如果您有第二个问题,您应该ask it as a separate question。提示:你如何启动这个窗口? 【参考方案1】:

方法 QDialog::acceptQDialog::reject 是虚拟的,因此可以在您的自定义对话框中覆盖它们(在您的情况下 - BTSettingsTab 继承自 QDialog)。

如果您想替换 acceptreject 的行为 - 只需在覆盖的方法中实现您想要的行为。或者您可以实现自己的方法BTSettingsTab::_OnAccept()_OnReject() 并将按钮连接到它们,而不是将它们连接到QDialog::acceptreject

如果您想添加您的自定义行为到默认 QDialog 的行为 - 在重载版本的末尾分别调用 QDialog::accept()QDialog::reject

【讨论】:

以上是关于按下 QDialog Cancel 或 OK 时如何调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何区分 InputBox Cancel 和 OK 按钮?

$mdDialog 确认重新排列 cancel-ok 到 ok-cancel

Qt exec()的返回值是多少啊

OK、Cancel 和 Apply 按钮作为一个组的作用的术语

带有 OK 和 Cancel 的 Swift 警报视图:点击了哪个按钮?

如何清空后挡?