c++ - Qt:如何让QDialog跟随父级

标签 c++ qt popup qdialog

我希望以前没有问过这个问题,但是我没有找到任何可以回答我特定问题的线程。

我创建了自己的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/

相关文章:

c++ - 如何将时间返回为 DD :HH:MM:SS?

c++ - MSVC 是否错误地处理依赖名称中的模板关键字?

c++ - Qt 中的警告 lnk4006

c++ - 包含 Qt 头文件的正确方法是什么?

sharepoint - 弹出窗口输入凭据

popup - SugarCRM-单击“保存”按钮时如何获取弹出窗口?

javascript - 防止 linkedin 和 twitter 共享在同一窗口中打开

c++ - 使用 openMP v. 2.0 并行化过滤器迭代器

c++ - 从函数返回 const 对象会阻止从外部进行 move 构造吗?

python - PyQt 中的自定义/所有者绘制控件?