2013-04-03 3 views
1

Я показываю QTableWidget и хочу, чтобы он исчез после того, как был выбран какой-либо элемент в этой таблице, и если пользователь щелкнул вне области QTableWidget.Сделать QWidget исчезает после нажатия на него

connect(tableWidget, SIGNAL(itemClicked(QTableWidgetItem *)), tableWidget, SLOT(close())); 

Эта линия делает то, что я хочу после выбора элемента. Является ли это способом заставить виджет исчезать после нажатия на него без его подклассификации (например, я могу подклассировать и написать собственный обработчик события потерять фокус, но без подкласса будет лучше)?

+1

У вас есть окружающая контейнер? Внесите в него событие, пока ваш виджет открыт ... –

+0

давайте предположим, что у вас есть MainWidget, который содержит все в нем. Он нажал(). Подключите это к некоторому слоту и в этом слоте скройте tableWidget (tableWidget() -> hide()) – Shf

+0

@ bash.d на основе идеи Ur Я положил QTableWidget в QWidget и сделал последнюю Qt :: Popup – Littlebitter

ответ

0

Мое решение было положить QTableWidget в QWidget и сделал последний Qt :: Popup - об этом, это действует точно так, как мне нужно

0

Это, вероятно, не очень элегантное решение, но оно может работать:

  1. Подкласс QTableWidget
  2. Убедитесь, что таблица виджет имеет фокус клавиатуры в то время как вы его отображения.
  3. переописать void QWidget::focusOutEvent (QFocusEvent * event) (закрыть таблицу виджет, когда вы теряете фокус)
+0

да, об этом варианте я писал в своем вопросе и вопросе, могу ли я его избежать =) – Littlebitter

1

давайте предположим, у вас есть MainWidget, который содержит все, что в нем. Он имеет сигнал clicked(). Подключите, что в какой-то щели и в этом слот скрыть tableWidget (tableWidget()->hide())

+0

Я это рассмотрел, но это не сработает если пользователь нажимает внешний вид главного виджета – Littlebitter

Смежные вопросы