做了4年的编程,没见过这么诡异的事情 求骨灰级大神
要做的东西很简单:就是当用户用鼠标左键单击主窗口上的一个graphicsview时,弹出一个dialog窗口
我的实现方法:
写一个class GraphicsViewDessin 继承QGraphicsView
重写mousePressEvent函数 在这个函数里emit一个信号
代码:
class GraphicsViewDessin : public QGraphicsView
{
Q_OBJECT
public:
GraphicsViewDessin(QWidget *parent = 0);
protected:
void mousePressEvent(QMouseEvent *);
signals:
void dessin_by_click();
};
GraphicsViewDessin::GraphicsViewDessin(QWidget *parent) : QGraphicsView(parent)
{
}
void GraphicsViewDessin::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
emit dessin_by_click();
}
}
在主窗口的函数中,将上面的信号和一个slot连起来:(主窗口上的graphicsview叫graphicsview_extra)
connect(ui->graphicsView_extra, SIGNAL(dessin_by_click()), this, SLOT(on_graphicsview_extra_clicked()));
这个slot如下:
void MainWindow::on_graphicsview_extra_clicked()
{
QDialog d(this);
d.exec();
}
运行程序后,当我点击主窗口上的那个graphicsview_extra时,则弹出一个Dialog,这没问题
问题是:
如果我此时点击Dialog右上角的红叉关掉它后,不论我在主窗口的哪里点击鼠标左键,都会再次打开一个Dialog
而如果我重写一个class去继承QDialog 然后在上面放一个按钮,然后把上面的slot换成启动这个我定义的Dialog,我仍然会遇到同样的问题~~~但是如果我在关闭它之前点击一下它上面的按钮,即使按钮什么事情也不做,这个问题就消失了....一切都变得正常了.....
而如果我切入到调试模式,我在上面的slot里面的d.exec()前面放一个断点,然后运行程序,当我第一次点击graphicsview_extra时,到断点停了,我点击继续,dialog弹出,然后我关闭它~~而后我在主窗口任意处点击左键,则又会运行到断点,然后我再点继续,dialog又弹出,我再关闭它,然后就一切有正常了..........也就是说,如果我调试的话,第一次通过点击graphicsview_extra启动后,只会出现一次这个问题...(而如果是直接运行,就会出现无数次,即,我在第一次正常点击graphicsview_extra后,不论我点击多少次主窗口的任意处,都会弹出dialog)
而如果我把上面的slot改掉,改成做其他事情---只要不是运行dialog,那么一切正常...
这个问题我想了两天了,没搞明白怎么回事......
求大神啊!~~~
[解决办法]