QDialog没有正确定位
QDialog not positioned correctly
我有一个问题,QDialog不显示在父窗口的中心。下面的代码片段对此进行了解释:
void MyWidget::showDialog() {
QObject* p = parent();
while (p!=0) {
qDebug() << p;
p = p->parent();
}
qDebug() << QApplication::activeWindow();
MyClassDerivedFromQDialog dlg( this );
if ( dlg.exec() != dlg.Accepted ) {
return;
}
... do something
}
qDebug的输出如下
QSplitter(0x2d89930, name = "splitter")
MyWidget(0x2d89670, name = "widget")
MainWindow(0x27ef20, name = "application")
MainWindow(0x27ef20, name = "application")
执行我的示例将打开屏幕上某处的对话框。将QApplication::activeWindow()作为父类传递给对话框构造函数,会产生一个位于主窗口中心的对话框。那么,这是为什么?如何追踪问题呢?
我发现这种行为与对话框创建的时间有关。如果您在显示对话框父之前创建了QDialog(或派生类)(例如,在父构造函数中),那么对话框将显示在一个不可预测的位置(或者至少不是您期望它显示的位置)。然而,如果对话框是在父元素显示之后创建的,那么您将得到预期的行为。例如,如果您有一个按钮调用您的对话框。按钮和对话框都是同一个小部件的子组件,因此对话框父组件与按钮父组件相同。在这种情况下,建议将对话框创建延迟到单击按钮,而不是在此之前。这样,您就可以确保只在显示父元素之后才创建对话框。
我不确定是否理解你的问题。
qdialog始终位于您作为父传递的小部件的中心。这是设计好的。因此,如果你传递"activeWindow()"作为父窗体,它将位于活动窗口的中心。如果你传递"this"作为父元素,对话框将位于MyWidget的中央。
你的对话在哪些方面不尊重这些规则?
Dialog类通过
实例化MyClassDerivedFromQDialog::MyClassDerivedFromQDialog(QWidget *parent)
: QDialog(parent),
ui(new Ui::MyClassDerivedFromQDialog)
{
ui->setupUi(this);
//remove the ? button in titlebar
Qt::WindowFlags flags = windowFlags();
Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);
setWindowFlags(flags);
}
我总是像在最初的帖子中使用showDialog函数一样使用它。有时它有效……不,我没有两个mywiget,它们是彼此的父母。
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 流填充字符的默认定位
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 自定义对话框(源自QDialog)不会关闭(Android)
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- NS3 - python.h 文件无法定位编译错误
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- QDialog 不能在 Windows 上退出,但在 MacOS 上不能退出/
- GLEW 未在 MSYS2 上定位 OpenGL 函数
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- 如何忽略32位整数中的特定位
- 如何在C++中使用光标定位
- QDialog自行关闭,我该如何解决?
- 使用 stdio.h 重新定位和重命名文件C++
- R 包安装错误:重新定位 0 具有无效的符号索引 11
- 对于可重定位的多平台安装,理想的 cmake 安装目录结构是什么?
- Qt5自定义QDialog,不使用qt创建器
- 不能使用使用 lib*.a 的 CDT ---对符号 .. 的重新定位R_X86_64_32S
- 在QDialog中使用QGridLayout定位QPushButton
- QDialog没有正确定位