【问题标题】:QDialog will not appear except if I call it?QDialog 不会出现,除非我调用它?
【发布时间】:2013-10-20 00:15:01
【问题描述】:

这不起作用:

void MainWindow::on_left_win_clicked()
{
    Dialog *dialog1 = new Dialog(this);
    dialog1->show();
    return;
}

但是这样做:

void MainWindow::on_left_win_clicked()
{
    QDialog *dialog1 = new QDialog(this);
    dialog1->show();
    return;
}

我只是使用了标准的 Qt Designer Form Class -> Dialog with Buttons Bottom

编辑:添加了 dialog.h 和 dialog.cpp

dialog.h 这只是标准的 dialog.h 没有在设计器窗口中为我创建的更改。

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

对话框.cpp。我在这里添加的唯一部分是基于另一个线程中的建议的 setWindowFlags(没有帮助)。

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent), ui(new Ui::Dialog)
{
    ui->setupUi(this);
    setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::Dialog);
}

Dialog::~Dialog()
{
    delete ui;
}

【问题讨论】:

  • 可能是布局问题?你的对话框有顶级布局吗? dialog1->sizeHint() 返回什么?
  • 这是我编译时得到的。 (只有对话)mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl Dialog::Dialog(class QWidget *)" (??0Dialog@@QEAA@PEAVQWidget@@@Z) referenced in function "private: void __cdecl MainWindow::on_left_win_clicked(void)" (?on_left_win_clicked@MainWindow@@AEAAXXZ)
  • 这是我使用 QDialog 时发生的情况。它会运行,但是当我尝试生成对话框时,会弹出一个小方框。 QWindowsWindow::setGeometry: Unable to set geometry 100x30+749+414 on 'QDialogClassWindow'. Resulting geometry: 116x30+749+414 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
  • 您显然没有编译/链接您的 Dialog::Dialog(QWidget*) 实现(通常是 dialog.cpp 或类似的)。这让我想知道代码是否曾经编译过?
  • 也许你改变了Dialogs 头文件中的某些内容,所以cpp 不匹配?

标签: c++ qt qmainwindow qdialog qtgui


【解决方案1】:

简单。如果您还没有创建typedef QDialog Dialog;,那么编译器可能不知道对话框

对于“易于理解”的代码,我会使用类的原始名称,因此任何人都可以看出对话框是 QDialog 对象

【讨论】:

  • 嗯......听起来很合理......我的错
  • 是的,这可能还不清楚。我在第一次 player_information_dialog 中使用了一个长名称,但输入起来很麻烦,我认为这可能是问题的根源,以某种我不知道的奇怪方式。所以我使用 Dialog 作为类名重新做了所有事情,并遇到了同样的问题。也许我在安装过程中遗漏了一些东西,而实际代码本身没有问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2018-12-05
  • 1970-01-01
相关资源
最近更新 更多