2013-04-03 57 views
1

我正在显示QTableWidget,并希望它在此表中的某个项目被选中并且用户在QTableWidget区域之外单击后消失。QWidget在点击没有消失后消失

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

这条线做选择项目后我想要的。这是一种让小部件在没有进行子类化之后不点击就消失的方法(例如,我可以继承子类并编写自己的lostfocus事件处理程序,但没有子类化会更好)?

+1

你有一个周边容器?在那里实现一个事件,而你的小部件已经打开了...... –

+0

让我们假设,你有MainWidget,它包含了它里面的所有东西。它点击了()信号。将它连接到某个插槽并在该插槽中隐藏tableWidget(tableWidget() - > hide()) – Shf

+0

@ bash.d基于Ur的想法我把QTableWidget放到QWidget中,并创建后者Qt :: Popup – Littlebitter

回答

0

我的解决办法是把QTableWidget的到了QWidget并取得后者的Qt ::弹出窗口 - 一个它的行为正是我需要

0

这可能不是一个非常优雅的解决方案,但它可能工作:

  1. 子类QTableWidget
  2. 确保表构件具有键盘焦点,而你显示它。
  3. 重新实现void QWidget::focusOutEvent (QFocusEvent * event)(关闭表窗口小部件,当你失去焦点)
+0

是的,关于这个变体我写过我的问题和问题是我可以避免它=) – Littlebitter

1

让我们假设,你有MainWidget,包含在其内的一切。它有clicked()信号。连接是一些插槽,该插槽隐藏tableWidget(tableWidget()->hide()

+0

我认为这个,但它不会工作如果用户将点击主窗口小部件外部 – Littlebitter