我希望以前没有问过这个问题,但是我没有找到任何可以回答我特定问题的线程。
我创建了自己的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();}
这是父Widget上用于创建并显示对话框的方法。
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标志不会更改行为。相反,当我将其传递给构造函数并且没有添加任何其他标志时,它破坏了整个布局。因此,没有太久不理会这个想法。
答案 0 :(得分:-1)
您的代码调用
对话框-> show();
用于非模式窗口。尝试使用
dialog-> exec();
如果您希望弹出窗口充当模式窗口。