我开始使用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.cpp
和mydialog.cpp
中(标题只是类)。
答案 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。