2017-08-07 566 views
1

我在做3个选项卡,从QDialog。然后在3个选项卡中添加2个小部件和1个QDialog。 我叫QDialog::acceptQDialog::reject。但我想要调用自定义方法,并在调用它们时应将对话框屏幕重置为列表框选择屏幕。我的代码如下:如何在按下QDialog Cancel或OK时调用某个功能?

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();

现在我该如何开始一个新窗口?

+0

如果你有第二个问题,你应该[问它作为一个单独的问题](https://meta.stackoverflow.com/questions/290746/follow-on-question-vs-edit-to-original-when -to-使用-哪个)。提示:你如何开始这个窗口? – Caleth

回答

2

方法QDialog::acceptQDialog::reject是虚拟的,这样他们就可以在自定义对话框中被覆盖(在你的情况 - BTSettingsTabQDialog继承)。

如果你想在acceptreject替代行为 - 只是实现了重写的方法你期望的行为。或者,您可以实施自己的方法BTSettingsTab::_OnAccept()_OnReject()并将按钮连接到它们,而不是将它们连接到QDialog::acceptreject

如果你想添加您的自定义行为默认QDialog的行为 - 在重载版本的结尾分别致电QDialog::accept()QDialog::reject

相关问题