Qt弹框问题
请问Qt中如何实现单击主窗口的一个按钮会弹出一个子窗口,而单击主窗口的任何地方,弹出的子窗口会隐藏 qt --------------------编程问答-------------------- 重载主窗口 void QWidget::mouseReleaseEvent ( QMouseEvent * event ) 函数在函数中实现子对话框的隐藏 --------------------编程问答-------------------- 按钮点击槽函数
还有主界面的mousePressEvent --------------------编程问答-------------------- mousePressEvent 不行我试了 ,单击其他在主窗口上的控件后,弹出的子窗口不会隐藏。 --------------------编程问答-------------------- mouseReleaseEvent 下对该对话框进行隐藏也不行。 --------------------编程问答--------------------
这是因为其他部件有自己的鼠标事件,先触发他们的,你自己的就被覆盖了。 --------------------编程问答-------------------- 请问有什么解决方法吗?要实现这个功能 ,弄好长时间了。 --------------------编程问答-------------------- 使用FocusIn与FocusOut事件:
在eventFilter中拦截按钮,事件为FocusIn时弹出框,事件为FocusOut时隐藏 --------------------编程问答-------------------- 请能够说具体吗,谢谢了。eventFilter我也用过 不知道你说的怎么用的,我这样试过// if (target !=dialog){
dialog.hide();
}
return QWidget::eventFilter(target, event);
} --------------------编程问答-------------------- 请问 QTreeWidget怎么捕获鼠标单击事件 --------------------编程问答-------------------- if (object == ui->treeWidget){
if (event->type() == QEvent::MouseButtonDblClick){
form.hide();
}
}
在eventFilter函数中这么实现不能执行 ,网上查了QTreeWidget不能在eventFilter安装过滤器 --------------------编程问答--------------------
+1
你看看http://blog.csdn.net/zhoxier/article/details/7655775
不要没出现你都效果就怀疑可行性,先在事件都响应里写点输出都语句 qDebug printF什么的,看看执行了没,时间管理器设好了没 --------------------编程问答--------------------
你是不是想实现Qt creator中如图示功能?这个Qt中自己有实现的。
首先,你需要给你弹出框设置一个属性setWindowFlags(Qt::Popup);
然后,你至少要重写你的弹出框的鼠标事件,如下:
void MiniProjectTargetSelector::mousePressEvent(QMouseEvent *e)
{
setAttribute(Qt::WA_NoMouseReplay);
QWidget::mousePressEvent(e);
}
这样的话你就可以实现弹出效果了,但是未定位。
如果要实现定位的话,你可以使用类似如下代码:
QPoint moveTo = statusBar->mapToGlobal(QPoint(0,0));
moveTo -= QPoint(0, totalHeight);
move(moveTo);
解释:statusBar是目标对话框,即要把弹出框放在statusBar邻近的上面,totalHeight为弹出框的高度。最后通过Move()函数把它移动到该位置。
以上代码都是从qt creator里复制出来的,如果想弄得更明白,可以去看看代码。 --------------------编程问答-------------------- 我想实现类似QComboBox这样的功能,单击下拉框按钮弹出一个软件盘,封装一个类似的控件。 --------------------编程问答-------------------- 对按钮单击事件编程,例如有个窗口类叫WIN;
在单击事件里面写
WIN w;
w.show(); --------------------编程问答--------------------
用这种方法同样可以实现。只要能做出弹出框,你用到哪不是一样。做输入法,你可以查考一下这个类QWSInputMethod --------------------编程问答-------------------- 我个人感觉Qt的自带文档可以解决很多问题了.可以采用eventFilter来处理该问题.
class MainWindow : public QMainWindow--------------------编程问答-------------------- 我想把它封装成一个控件,你这样只是弹出一个窗口,而应用到其他程序中会弹出窗口而不是像QComboBox控件那样应用。
{
public:
MainWindow();
protected:
bool eventFilter(QObject *obj, QEvent *ev);
private:
QTextEdit *textEdit;
};
MainWindow::MainWindow()
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);
textEdit->installEventFilter(this);
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
qDebug() << "Ate key press" << keyEvent->key();
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
补充:移动开发 , Qt