当前位置:编程学习 > wap >>

Qt弹框问题

请问Qt中如何实现单击主窗口的一个按钮会弹出一个子窗口,而单击主窗口的任何地方,弹出的子窗口会隐藏 qt --------------------编程问答-------------------- 重载主窗口 void QWidget::mouseReleaseEvent ( QMouseEvent * event ) 函数

在函数中实现子对话框的隐藏 --------------------编程问答-------------------- 按钮点击槽函数
还有主界面的mousePressEvent --------------------编程问答--------------------
引用 2 楼 CanDy_O 的回复:
按钮点击槽函数
还有主界面的mousePressEvent
mousePressEvent 不行我试了 ,单击其他在主窗口上的控件后,弹出的子窗口不会隐藏。 --------------------编程问答--------------------
引用 3 楼 zhangshan415 的回复:
引用 2 楼 CanDy_O 的回复:按钮点击槽函数
还有主界面的mousePressEventmousePressEvent 不行我试了 ,单击其他在主窗口上的控件后,弹出的子窗口不会隐藏。
mouseReleaseEvent 下对该对话框进行隐藏也不行。 --------------------编程问答--------------------
引用 4 楼 zhangshan415 的回复:
引用 3 楼 zhangshan415 的回复:引用 2 楼 CanDy_O 的回复:按钮点击槽函数
还有主界面的mousePressEventmousePressEvent 不行我试了 ,单击其他在主窗口上的控件后,弹出的子窗口不会隐藏。mouseReleaseEvent 下对该对话框进行隐藏也不行。


这是因为其他部件有自己的鼠标事件,先触发他们的,你自己的就被覆盖了。 --------------------编程问答--------------------
引用 5 楼 haltwang 的回复:
引用 4 楼 zhangshan415 的回复:引用 3 楼 zhangshan415 的回复:引用 2 楼 CanDy_O 的回复:按钮点击槽函数
还有主界面的mousePressEventmousePressEvent 不行我试了 ,单击其他在主窗口上的控件后,弹出的子窗口不会隐藏。mouseReleaseEvent 下对该对话框进行隐藏也不行。

这是因为其他……
请问有什么解决方法吗?要实现这个功能 ,弄好长时间了。 --------------------编程问答-------------------- 使用FocusIn与FocusOut事件:
在eventFilter中拦截按钮,事件为FocusIn时弹出框,事件为FocusOut时隐藏 --------------------编程问答--------------------
引用 7 楼 wopabe 的回复:
使用FocusIn与FocusOut事件:
在eventFilter中拦截按钮,事件为FocusIn时弹出框,事件为FocusOut时隐藏
请能够说具体吗,谢谢了。eventFilter我也用过 不知道你说的怎么用的,我这样试过//    if (target !=dialog){

          dialog.hide();

    }
   return QWidget::eventFilter(target, event);
} --------------------编程问答--------------------
引用 7 楼 wopabe 的回复:
使用FocusIn与FocusOut事件:
在eventFilter中拦截按钮,事件为FocusIn时弹出框,事件为FocusOut时隐藏
请问 QTreeWidget怎么捕获鼠标单击事件 --------------------编程问答--------------------  if (object == ui->treeWidget){

        if (event->type() == QEvent::MouseButtonDblClick){

            form.hide();
        }
    }
在eventFilter函数中这么实现不能执行 ,网上查了QTreeWidget不能在eventFilter安装过滤器 --------------------编程问答--------------------
引用 7 楼 wopabe 的回复:
使用FocusIn与FocusOut事件:
在eventFilter中拦截按钮,事件为FocusIn时弹出框,事件为FocusOut时隐藏


+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里复制出来的,如果想弄得更明白,可以去看看代码。 --------------------编程问答--------------------
引用 12 楼 fsx92 的回复:
你是不是想实现Qt creator中如图示功能?这个Qt中自己有实现的。

首先,你需要给你弹出框设置一个属性setWindowFlags(Qt::Popup);
然后,你至少要重写你的弹出框的鼠标事件,如下:
void MiniProjectTargetSelector::mousePressEvent(QMouseEvent *e)
{
    setAttribute(Qt::W……
我想实现类似QComboBox这样的功能,单击下拉框按钮弹出一个软件盘,封装一个类似的控件。 --------------------编程问答-------------------- 对按钮单击事件编程,例如有个窗口类叫WIN;
在单击事件里面写
WIN w;
w.show(); --------------------编程问答--------------------
引用 13 楼 zhangshan415 的回复:
引用 12 楼 fsx92 的回复:你是不是想实现Qt creator中如图示功能?这个Qt中自己有实现的。

首先,你需要给你弹出框设置一个属性setWindowFlags(Qt::Popup);
然后,你至少要重写你的弹出框的鼠标事件,如下:
void MiniProjectTargetSelector::mousePressEvent(QMouseEvent……


用这种方法同样可以实现。只要能做出弹出框,你用到哪不是一样。做输入法,你可以查考一下这个类QWSInputMethod --------------------编程问答-------------------- 我个人感觉Qt的自带文档可以解决很多问题了.可以采用eventFilter来处理该问题.
class MainWindow : public QMainWindow
 {
 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);
     }
 }
--------------------编程问答--------------------
引用 14 楼 MrXiao95 的回复:
对按钮单击事件编程,例如有个窗口类叫WIN;
在单击事件里面写
WIN w;
w.show();
我想把它封装成一个控件,你这样只是弹出一个窗口,而应用到其他程序中会弹出窗口而不是像QComboBox控件那样应用。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,