2012-10-27 94 views
-2

我開始使用Qt作爲GUI,但由於缺少一些函數,我在頭文件/庫中遇到了一些問題。在我的Qt類中缺少一些函數

其中兩個是:

<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: error: 'class MyDialog' has no member named '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(標題只是類)。

+1

請告訴我們您正在使用哪個版本的Qt和哪個操作系統。如果沒有這些信息,我們如何幫助您?我們是魔術師嗎? - 除此之外,'QDialog'在4.x和5.0中都有這兩種方法。所以你的對象可能不會從'QDialog'繼承。你剛剛創建了一個簡單的* widget而不是* dialog *嗎? – leemes

+0

我正在使用最新版本!對於windows –

+1

您是否包含「mydialog.h」?並告訴我們「mydialog.h」,它可能是這裏最重要的一段代碼。**請**不要只寫「不起作用」。告訴我們**會發生什麼**,即粘貼編譯器錯誤。 – leemes

回答

1

MyDialogQDialog。你將它創建爲一個沒有對話框的「主窗口」。

要熱解決這個問題(而無需重新創建使用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文件。

+0

好吧,讓我研究繼承來做到這一點。只需一秒' –

+0

Didnt work:Error >> C:\ QtSDK \ teste-build-desktop-Qt_4_8_1_for_Desktop _-_ MinGW__Qt_SDK__Debug \ .. \ teste \ mydialog.cpp:5:error:類型'QMainWindow'不是'MyDialog'的直接基礎錯誤>>>>>> C:\ QtSDK \ teste-build-desktop-Qt_4_8_1_for_Desktop _-_ MinGW__Qt_SDK__Debug \ .. \ teste \ mydialog.cpp:8:error:no matching函數調用'Ui :: MyDialog :: setupUi(MyDialog * const)' –

+0

你的想法是什麼? –

1

您試圖從MyDialog類調用setModal(),但它繼承自QMainWindow,它沒有setModal方法。您必須改爲從QDialog繼承。

+0

這是使用設計器的缺點之一。 –

+0

確實意味着leemes的含義?沒有工作 –

+0

@wingleader *什麼*是設計師的缺點? – leemes