Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按下QDialog Cancel或OK时如何调用函数?_C++_Linux_Qt_Qdialog - Fatal编程技术网

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

C++ 按下QDialog Cancel或OK时如何调用函数?,c++,linux,qt,qdialog,C++,Linux,Qt,Qdialog,我正在做QDialog中的3个选项卡。然后将2个小部件和1个QDialog添加到3个选项卡中。 我已经调用了QDialog::accept和QDialog::reject。但我希望调用自定义方法,调用它们时应将对话框屏幕重置为列表框所选屏幕。我的代码如下: BTSettingsTab::BTSettingsTab(const QFileInfo &fileInfo, QWidget *parent) : QDialog(parent) { ........... ........

我正在做
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);
}
BTSettingsTab::BTSettingsTab(常量QFileInfo和fileInfo,QWidget*父项)
:QDialog(父级)
{
...........
.............
QLabel*topLabel=新的QLabel(tr(“选择设置:”);
QListWidget*settingsListBox=新的QListWidget;
QStringList设置;
/*对于(int i=1;i插入项(0,应用程序)*/
append(tr(“newConfiguration:”);
追加(tr(“编辑配置:”);
追加(tr(“删除配置:”);
附加(tr(“将当前位置添加到关闭位置:”);
附加(tr(“临时关闭距离”);
设置。追加(tr(“临时关闭关闭位置:”);
设置。追加(tr(“工厂重置”);
附加(tr(“打开距离:”);
附加(tr(“打开关闭位置:”);
设置。追加(tr(“退出”);
设置列表框->插入项(0,设置);
QDialogButtonBox*buttonBox=新的QDialogButtonBox(QDialogButtonBox::Ok
|QDialogButtonBox::取消);
连接(buttonBox,&QDialogButtonBox::accept,this,&QDialog::accept);
连接(buttonBox,&QDialogButtonBox::rejected,this,&QDialog::rejected);
QVBoxLayout*布局=新的QVBoxLayout;
布局->添加小部件(topLabel);
布局->添加小部件(设置列表框);
布局->添加小部件(按钮盒);
设置布局(布局);
}
我看到了你的帖子。谢谢。我实现了重载函数,断点命中了它们。我得到了所选项目的行号。我使用了QString*curr=settingsListBox->currentItem()->text()


现在如何启动新窗口?

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

如果您想替换
接受
拒绝
上的行为,只需在重写的方法中实现所需的行为。或者您可以实现自己的方法
btsetingstab::\u OnAccept()
\u OnReject()
并将按钮连接到它们,而不是将它们连接到
QDialog::accept
reject


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

如果有第二个问题,应该这样做。提示:如何启动此窗口?