2017-08-07 2 views
1

Ich mache 3 Tabs von QDialog. Fügen Sie dann 2 Widget und 1 QDialog zu 3 Tabs hinzu. Ich habe die QDialog::accept und QDialog::reject aufgerufen. Aber ich möchte, dass benutzerdefinierte Methoden aufgerufen werden, und wenn sie aufgerufen werden, sollte der Dialogbildschirm auf den ausgewählten Listenbildschirm zurückgesetzt werden. Mein Code folgt:So rufen Sie eine Funktion auf, wenn QDialog Abbrechen oder OK gedrückt wird?

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

Ich sah Ihren Beitrag. Vielen Dank. Ich implementierte die überladenen Funktionen und Breakpoint trifft sie. Ich habe die Zeilennummer des ausgewählten Elements erhalten. Ich habe QString * curr = settingsListBox-> currentItem() -> text();

Wie starte ich ein neues Fenster?

+0

Wenn Sie eine zweite Frage haben, sollten Sie [als separate Frage fragen] (https://meta.stackoverflow.com/questions/290746/follow-on-question-vs-edit-to-original-when -zu-verwenden-was). Tipp: Wie fängst du * dieses * Fenster an? – Caleth

Antwort

2

Methoden QDialog::accept und QDialog::reject sind virtuell, so können sie in Ihrem benutzerdefinierten Dialog außer Kraft gesetzt werden (in Ihrem Fall - BTSettingsTab, die von QDialog erbt).

Wenn Sie Ersatz Verhalten wollen auf accept und reject - einfach das gewünschte Verhalten in den überschriebenen Methoden implementieren. Oder Sie können Ihre eigenen Methoden BTSettingsTab::_OnAccept() und _OnReject() implementieren und Tasten an sie anschließen, anstatt sie mit QDialog::accept und reject zu verbinden.

Wenn Sie wollen Ihr individuelles Verhalten hinzufügen QDialog ‚Verhalten auf Standard - rufen QDialog::accept() und QDialog::reject jeweils am Ende der überladenen Versionen.

Verwandte Themen