Проверьте, если диалоговое окно / виджет / окно все еще открыто, чтобы предотвратить дублирование

Как помешать открыть окно много раз.

Смотрите следующее изображение:

То, что я хочу, это если окно все еще открыто, не открывает то же самое окно еще раз, кроме как после закрытия открытого окна.

Наконец, код:

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

1

Решение

Решение состоит в том, чтобы:

  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;
    }
    
3

Другие решения

  • Храните searchitem в классе и создайте один раз, или
  • отключить кнопку после открытия, включить при закрытии или
  • сделать диалог модальным
2

По вопросам рекламы [email protected]