Qt运行单一应用程序

时间:2013-10-24 10:03:45

标签: c++ qt

我有几个对话框和按钮来调用这些对话框。但是,每次单击该按钮都会调用一个新的对话框窗口。我想在用户点击按钮打开另一个按钮之前先关闭现有窗口。

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

感谢。

Bookmark.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();
}

Bookmark.h:

class Bookmark : public QToolBar
{
    Q_OBJECT

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

public slots:
    void openBookmarkDlg();

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

3 个答案:

答案 0 :(得分:0)

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

请注意,模式窗口可能真的让用户烦恼。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

然后关于类的实现,你可以这样做:

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

    bkDlg->show();
}