qt предотвращает перемещение qdialog/window вместе с mainwindow

Оболочка

  • OS X 10.6.8 ... и выше, Windows XP ... и выше.
  • Qt 4.7 (должно быть, устаревшие проблемы, OS X 10.6.8 должна поддерживаться, Qt5 этого не сделает)

Проблема

Я открыл второе окно в своем приложении. Оно ведет себя так, как я хочу, за исключением того, что если MainWindow в приложении перемещается, то и это окно перемещается. Такое поведение нежелательно (на самом деле больше похоже на «токсичное и недружелюбное к пользователю»).

Документы Qt говорят не вызывать move() из moveEvent(), и в любом случае moveEvent() появляется только после того, как окно перестало двигаться, даже не во время перемещения, что было бы, даже если бы я использовал это приведет к тому, что второе окно переместится и вернется назад, что было бы довольно ужасно.

Я думал попробовать переопределить move() и не вызывать QDialog::move(), но это не сработало, кажется, его нельзя переопределить; Окно rfview по-прежнему следует за основным окном.

Возможно, я неправильно открываю окно:

void MainWindow::xrfview()
{
    ttrfview = new rfview(this);
    uiframePlot = ttrfview->ui->framePlot;
    ttrfview->show();
    ttrfview->raise();
}

Или, возможно, я неправильно определил окно:

class rfview: public QDialog
{
    Q_OBJECT

public:
    explicit rfview(QWidget *parent = 0);
    ~rfview();
}

Или оба?

По сути, если пользователь перетаскивает или перемещает MainWindow, я не хочу, чтобы rfview окно следовало за ним.


person fyngyrz    schedule 24.12.2016    source источник
comment
trt с помощью: ttrfview = new rfview();   -  person eyllanesc    schedule 24.12.2016
comment
@eyllanesc да, это работало под OS X, моей средой разработки. Пожалуйста, ответьте, и я поставлю галочку. Спасибо за очень быстрое решение.   -  person fyngyrz    schedule 24.12.2016


Ответы (1)


Изменить ttrfview = new rfview(this) на ttrfview = new rfview()

person eyllanesc    schedule 24.12.2016