c++ - 检查对话框/小部件/窗口是否仍然打开以防止重复

标签 c++ qt qt5 duplication

如何防止多次打开窗口。

参见下图:

我想要的是,如果仍然打开的窗口不会再次打开同一个窗口,除非关闭打开的窗口后。

最后是代码:

void Widget::on_search_btn_clicked(){
    searchItem *searchBox = new searchItem;
    searchBox->setModal(false);  // <--- I want this as it is
    searchBox->show();
    searchBox->activateWindow();
}

最佳答案

解决方案是:

  1. 添加 searchItem *searchBox 作为类的成员。

    private:
        searchItem* m_searchBox;
    
  2. 在构造函数中使用 new searchItem() 进行初始化。

    Widget::Widget() {
        ...
        m_searchBox = new searchItem();
    }
    
  3. 调用 void Widget::on_search_btn_clicked() 并使用 m_searchBox 上的函数(因此,这是唯一将打开的窗口,即使它已经打开了)

    void Widget::on_search_btn_clicked(){
        m_searchBox->setModal(false);
        m_searchBox->show();
        m_searchBox->activateWindow();
    }
    
  4. 在析构函数中删除

    Widget::~Widget() {
        ...
        delete m_searchBox;
    }
    

关于c++ - 检查对话框/小部件/窗口是否仍然打开以防止重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308750/

相关文章:

c++ - 对指针不了解

python - 如何使用嵌入式 python 解释器构建和执行 cpp 文件(pybind11)

c++ - QT 5.2.1 编译错误; 'delete' 之前的预期不合格 ID

c++ - QML QSettings 和 QML - 无法保存/加载设置

c++ - AIX:_snw(unsigned long) 中的 malloc?

c++ - 从模板列表中删除对象

c++ - QT - 顶部窗口

c++ - Qt 必须在 QWidget 之前构造 QApplication

c++ - 使用带有 qmake 的子目录结构避免重复的目标文件

c++ - QAbstractSpinBox - indexChanged 信号