缺少我的Qt类中的一些函数

时间:2012-10-27 19:20:44

标签: c++ qt

我开始使用Qt作为GUI,但是我遇到了一些标题/库的问题,因为我缺少一些函数。

其中两个是:

<obj_name>.setModal(true);
<obj_name>.exec();

他们应该像在the video I'm following(6:30)一样正常工作。

因为我完全按照他们所做的去做,所以我的线索是他的版本与我的版本不一样。

我想知道我应该包含哪个标题。

这是我的代码:

void MainWindow::on_actionNew_Window_triggered()
{
    MyDialog mDialog;
    mDialog.setModal(true);
    mDialog.exec();

}

即使:

#include <QDialog>

仍然无效。它说:

  

C:\ QtSDK \ teste-build-desktop-Qt_4_8_1_for_Desktop _- MinGW _Qt_SDK__Debug .. \ teste \ mainwindow.cpp:22:错误:'class MyDialog'没有名为'setModal'的成员。

mydialog.h代码:

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QMainWindow>
#include <QDialog>

namespace Ui {
class MyDialog;
}

class MyDialog : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MyDialog *ui;
};

#endif // MYDIALOG_H

它包含在mainwindow.cppmydialog.cpp中(标题只是类)。

2 个答案:

答案 0 :(得分:1)

MyDialog不是QDialog。您将其创建为“主窗口”,而不是对话框。

要对此进行热修复(不使用QtCreator重新创建对话框),只需重写mydialog.h中的继承 从:

class MyDialog : public QMainWindow

为:

class MyDialog : public QDialog

mydialog.cpp中,您找到了调用超类构造函数的MyDialog构造函数的实现。由于我们刚刚更改了超类,因此我们还必须更改此调用:

MyDialog::MyDialog(QWidget *parent) :
    QMainWindow(parent)
...

MyDialog::MyDialog(QWidget *parent) :
    QDialog(parent)
...

您还必须修复.ui文件以将整个窗口小部件从主窗口变形为对话框。我将在几分钟内添加如何执行此操作(必须找到它)您不需要触摸.ui文件。

答案 1 :(得分:1)

你试图从MyDialog类调用setModal(),但它继承自QMainWindow,它没有setModal方法。你必须改为继承QDialog。