0

QDialogをオーバーライドせずにサブクラス化するクラスexec()accept()またはその内部でクラスreject()を呼び出す別のクラスがあります。DialogmousePaintEvent

void Canvas::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton){
        if (dialog->isVisible()){
            dialog->setModal(true);
            dialog->move(QWidget::mapToGlobal(event->pos()));
             //I connect the dialog's accepted signal to the CallingClass's slot, that uses the information taken from the dialog
            connect(dialog, &Dialog::accepted, this, &CallingClass::slot);
            dialog->exec();
        }
    }
    if (dialog->isVisible()){
        if (dialog->rect().contains(event->pos())){
            dialog->reject();
        }
    }
}

チェックのためにDialogの存在を使用しようとしましたが、delete実際には機能しませんでした(dialog.reject()の後に入れました)最後のifですが、.reject()の後は何も機能しないと思い始めました。どうすればいいですか?

4

2 に答える 2

1

私の理解では、dialog->rect() では必要なものが得られません (これを参照)。残念ながら今はテストできませんが、posと組み合わせて使用​​するか、直接frameGeometryを使用してみてください。これにより、親に対するウィンドウの実際の位置とサイズが得られます。クリックイベントから座標として取得した値とそれらのメソッドからの値を確認して、それらの使用方法を正確に把握してみてください...基本的に、デスクトップに相対的なグローバル座標を使用するかどうかを決定する必要があります。親ウィンドウ。

于 2015-04-23T07:19:12.430 に答える