1

我有一些对话框和调用这些对话框的按钮。但是,每次单击按钮都会调用一个新的对话窗口。我希望先关闭现有窗口,然后用户可以单击按钮打开另一个窗口。

下面是一个调用插槽的按钮示例。每当我单击按钮时,它都会调用对话窗口的副本。有没有办法只调用对话窗口的一个副本?

谢谢。

书签.cpp:

Bookmark::Bookmark()
{
    createButtons();
    connect(bookmarkButton, SIGNAL(clicked()), this, SLOT(openBookmarkDlg()));
}

void Bookmark::createButtons()
{
    ...

    bookmarkButton = new QToolButton;
    bookmarkButton->setText("Bookmark");
    addWidget(bookmarkButton);

    ...
}

void Bookmark::openBookmarkDlg()
{
    BookmarkDlg *bkDlg = new BookmarkDlg;
    bkDlg->show();
}

书签.h:

class Bookmark : public QToolBar
{
    Q_OBJECT

public:
    Bookmark(void);
    ~Bookmark(void);

public slots:
    void openBookmarkDlg();

private:
    createButtons();
    QToolButton *bookmarkButton;
};
4

3 回答 3

0

如果您希望对话框窗口是模态的,即应用程序不接受对话框外的用户输入,请使用对话框的窗口模态

但是请注意,模态窗口对用户来说真的很烦人。

于 2013-10-24T10:07:10.117 回答
0

转换BookmarkDlg *bkDlg为类的变量成员,而不是方法的局部变量

private:
    createButtons();
    QToolButton *bookmarkButton;
    BookmarkDlg *bkDlg;

然后在类的实现上,你可以这样做:

void Bookmark::openBookmarkDlg()
{
    if (!bkDlg)
        bkDlg = new BookmarkDlg;

    bkDlg->show();
}
于 2013-10-25T17:43:41.350 回答
0

如果BookmarkDlg继承 QDialog 您可以执行以下操作:

void Bookmark::openBookmarkDlg()
{
    BookmarkDlg *bkDlg = new BookmarkDlg;

    prepareYourDialog(bkDlg);

    /*If you expect to do something when the dialog is accepted*/
    if (bkDlg->exec() == QDialog::Accepted)
    {
         /*Do something after dialog was accepted, and nothing when canceled*/
    }

    delete bkDlg;
}
于 2013-10-25T17:38:49.670 回答