Qt小部件显示在其他小部件上方

9

我有一些信息/通知小部件,应在某些事件发生时显示。我的想法是有一个隐藏在左上角的小部件,在需要时显示出来。问题是,如果我只放置一个简单的小部件并显示它,所有内容都会向右移动。我想要的是在该区域顶部显示该小部件(它将隐藏原有内容,但这没关系)。 我不能使用堆叠小部件,因为信息小部件的尺寸与其他小部件不同。如果我只创建一个浮动小部件并将其移动到该区域,则当主窗口移动时它不会移动。 有没有办法做到这一点?


2
将一个父部件设置给小部件,但不要将其添加到布局中。这样行得通吗? - thuga
我还没有尝试过,谢谢。 - Dainius
@thuga,这是最终正确的Qt C++方式! - Mohammad Kanan
2个回答

5

只需动态创建并放置小部件。避免使用UI来放置小部件,因为这样小部件位置是由布局管理的。

编辑:请记得在对话框初始化后再创建小部件。如果您不注意这一点,您的小部件将被插入到底部。

class Dialog : public QDialog
{
    Q_OBJECT

    std::unique_ptr<Ui::Dialog> _ui;
    QWidget* _widgetOnTheTop;

  public:
    Dialog(QWidget* parent)
      : QDialog(parent), _ui(new Ui::Dialog)
    {
      _ui->setupUi(this);

      _widgetOnTheTop = new QPushButton(this);
      _widgetOnTheTop->setGeometry(10,10,100,35);
      _widgetOnTheTop->show();
    }
};

0

查看QDialog,当出现错误时创建并执行其中一个,您可以构造它们以具有默认的确定和取消按钮

编辑:抱歉,我是指QMessageBox,请参见下面的代码

QMessageBox error_message(QMessageBox::Icon::Critical, "Title of the window","Some Text about the error to show the user", QMessageBox::StandardButtons(QMessageBox::Yes | QMessageBox::Cancel), this);
error_message.exec();

这不是错误,而是一些关于对象的附加信息,它们被某些操作触发,例如某些轴的旋转角度。因此,我不能使用模态对话框(并且更倾向于不使用与主部件分离的对话框)。该部件中的信息可能在用户此时(或直到某些其他操作)很有用,也可能不是(在这种情况下,他将只需关闭/隐藏)。 - Dainius
如果您正在使用Visual Studio,如果您在右侧(或左侧)工具箱上启用了自动隐藏功能,则可以看到类似的内容。它将覆盖现有布局,但不会影响它。 - Dainius
你可以使用QDialog,然后创建它并设置非模态和始终置顶的标志,这似乎比添加另一个隐藏的小部件并在需要时显示它更好。 - AngryDuck
你能使用工具提示吗?如果不能,也许你可以使用堆叠窗口小部件,但这需要一些编程。 - m. c.
工具提示不允许交互,至少据我所知,并且堆叠小部件要求该位置上的所有小部件具有相同的几何形状,而它们是不同的。 - Dainius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接