Je rencontre un problème. Je veux échanger deux widgets Qt:Échange de Qt Widgets
void swap(QMainWindow **w1, QMainWindow **w2)
{
QMainWindow *w3;
w3 = *w1;
*w1 = *w2;
*w2 = w3;
}
Cependant, si je widget1
de type MainWindow1*
et widget2
de type MainWindow2*
et j'appelle swap(&widget1, &widget2);
je reçois
/home/user/Test/manager.cpp:24: error: invalid conversion from 'MainWindow1**' to 'QMainWindow**' [-fpermissive]
swap(&widget1, &widget2);
^
je dois noter que MainWindow1
et MainWindow2
sont deux QMainWindow
classes dérivées.
Ma question est la suivante: Est-il possible de créer une fonction qui permute à l'exécution deux objets polymorphes? Comment puis-je contourner ce problème?
Merci beaucoup!
Je n'ai pas utilisé Qt.Does QMainWindow class implémente la fonction d'opérateur d'affectation? Si la réponse est oui, vous pouvez. Je vous suggère de vérifier API –
Notez que [std :: swap existe déjà] (http://en.cppreference.com/w/cpp/algorithm/swap) en C++ (si vous ' #include '). Vous n'êtes pas obligé de l'écrire vous-même. Mais ce que vous demandez ici va à l'encontre des principes du système de type statique de C++. Les types de toutes les variables sont fixés à la compilation ... et cela inclut les pointeurs. Si vous avez besoin de quelque chose qui peut contenir différents pointeurs, vous pouvez utiliser une union typée ... mais cela signifie probablement que votre conception est fausse. Vous pouvez juste avoir besoin d'une autre classe de base intermédiaire dérivée de QMainWindow pour tout ce que ces fenêtres ont en commun. –
HostileFork
@RonTang Malheureusement, aucune des classes QObject, donc QMainWindow implémentent l'opérateur d'affectation ou le constructeur de copie. C'est par conception en Qt. Donc ce n'est pas possible ... –