交换Qt小部件

时间:2015-03-02 00:44:32

标签: c++ qt polymorphism swap qobject

我遇到了问题。我想交换两个Qt小部件:

void swap(QMainWindow **w1, QMainWindow **w2)
{
    QMainWindow *w3;

    w3 = *w1;
    *w1 = *w2;
    *w2 = w3;
}

但是,如果我widget1类型为MainWindow1*widget2类型为MainWindow2*,我就会调用swap(&widget1, &widget2);

/home/user/Test/manager.cpp:24: error: invalid conversion from 'MainWindow1**' to 'QMainWindow**' [-fpermissive]
  swap(&widget1, &widget2);
       ^

我必须注意MainWindow1MainWindow2是两个QMainWindow派生类。

我的问题是:是否有可能创建一个在运行时交换两个多态对象的函数?我怎样才能解决这个问题?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您不应该像以下那样将MainWindow1MainWindow2指针传递给交换。

MainWindow1* w1 = new MainWindow1();
MainWindow2* w2 = new MainWindow2();
swap(&w1, &w2);

如果在这种情况下交换可能MainWindow1指针将指向MainWindow2对象,这是不正确的。

您必须将MainWindow指针传递给交换,如下所示。

MainWindow* w1 = new MainWindow1();
MainWindow* w2 = new MainWindow2();
swap(&w1, &w2);