我希望以前没有问过这个问题,但是我没有找到任何可以回答我特定问题的线程。
我创建了自己的QDialog类(TagPopup),该类准确显示了我在其Constructor中指定的布局。 QDialog是在父级的中心创建的-正如预期的那样-但是当我移动父级时,该Dialog停留在其原始位置。我希望它始终保持在父窗口小部件的中心,而不管它在哪里移动。
父类是从QMainWindow(PlayerWindow)派生的自定义类。
父类的WindowFlags尚未更改,但子代必须是模态的,必须具有Qt :: WA_TranslucentBackground作为属性,并且必须设置Qt :: FramelessWindowHint。
这是否只能通过覆盖父母的搬家事件来解决,然后让孩子随其搬家,还是有一个更优雅的解决方案?
void PlayerWindow::open_tag_dialog(int id) {
TagPopup *dialog = new QDialog(this, GameTag::int_to_tag_type(id), (int) 1000000 * elapsed_seconds(), {this->clip->game->home_team, this->clip->game->away_team});
dialog->show();}
这是父窗口小部件上的方法,该方法创建并显示对话框。
explicit TagPopup(QWidget *parent = 0, TagType tag_type = TagType::CUSTOM, int time = 0, vector<Team*> teams = {}, int min_height = 360) : QDialog(parent, Qt::FramelessWindowHint), BasePlayer(min_height, this){
setModal(true);
setAttribute(Qt::WA_TranslucentBackground);
Qt::WindowFlags flags = windowFlags();
setWindowFlags(flags | Qt::WindowStaysOnTopHint);
这些是子构造函数的第一行,用于处理标志和属性的设置。
我肯定尝试删除所有标志,但这也无济于事。
QDialog是否用于创建类似弹出窗口的内容?似乎是显而易见的选择。添加Qt :: Popup标志不会更改行为。相反,当我将其传递给构造函数并且没有添加任何其他标志时,它破坏了整个布局。因此,没有太久没有介入这个想法了。
最佳答案
您的代码调用
对话框-> show();
适用于非模式窗口。尝试使用
dialog-> exec();
如果您希望弹出窗口充当模式窗口。
关于c++ - Qt:如何让QDialog跟随父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51421456/