【问题标题】:Qt Run Single ApplicationQt 运行单个应用程序
【发布时间】:2013-10-24 10:03:44
【问题描述】:

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

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

谢谢。

书签.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;
};

【问题讨论】:

  • 只是不要在Bookmark::openBookmarkDlg()中创建另一个对话框实例
  • @DmitrySazonov:谢谢。我将new 语句移到了我的构造函数中,现在它只打开了对话窗口的一个实例。我还将show() 改为exec()
  • @Wallace 如果我的回答有帮助,请投票。如果它解决了您的问题,请单击它附近的复选框。通过做这些事情,您将帮助未来的访问者。

标签: c++ qt


【解决方案1】:

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

但请注意,模态窗口可能真的让用户感到厌烦。

【讨论】:

  • 谢谢。将来我也需要它。我现在的问题是我正在寻找更多关于如何运行对话窗口的单个实例。
【解决方案2】:

如果 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;
}

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多