我有几个对话框和按钮来调用这些对话框。但是,每次单击该按钮都会调用一个新的对话框窗口。我想在用户点击按钮打开另一个按钮之前先关闭现有窗口。
以下是调用插槽的按钮示例。每当我点击按钮时,它都会调用对话窗口的副本。有没有办法只调用对话窗口的一个副本?
感谢。
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;
};
答案 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();
}