-2

我开始将 Qt 用于 GUI,但是由于缺少一些功能,所以我在标头/库方面遇到了一些问题。

其中两个是:

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

它们应该可以正常工作,就像我正在关注的视频中一样(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.cppand中mydialog.cpp(标题只是类)。

4

2 回答 2

1

MyDialog is no QDialog. You created it as a "main window" which is no dialog.

To hot-fix this (without recreating the dialog using QtCreator), just rewrite the inheritance in mydialog.h from:

class MyDialog : public QMainWindow

to:

class MyDialog : public QDialog

In your mydialog.cpp you find the implementation of the constructor of MyDialog which calls the superclass constructor. Since we just changed the superclass, we also have to change this call from:

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

to

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

You also have to fix your .ui file to morph the whole widget from a main window to a dialog. I'll add how to do so in a few minutes (have to find it out) You don't need to touch the .ui file.

于 2012-10-27T20:23:01.753 回答
1

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

于 2012-10-28T00:36:37.613 回答