2015-12-22 482 views
2

我想用按鈕打開一個簡單的QT主窗口來打開第二個窗口或對話框。我直接從QT鏈接「在應用程序中使用設計器UI文件」開始,並遵循單繼承示例。不完整類型'class Ui :: dialog(QT錯誤)的使用無效

但QT給出了4個錯誤,您將看到下面的快照。

現在,我所做的是我在Qt設計器中創建了一個主窗口,然後向該項目添加了第二個窗體,當點擊一個按鈕時這將成爲第二個窗體。因爲我手動創建了表單「mydialog.ui」,所以我添加了「mydialog.h和mydialog.cpp」類,並將「ui-mydialog」的標題放在源文件「mydialog.cpp」中。

我不知道我錯過了什麼?

下面是代碼:

- mydialog.h

#ifndef MYDIALOG_H 
#define MYDIALOG_H 
#include<QWidget> 

class mydialog ; 

namespace Ui { 
class mydialog; 
} 

class mydialog : public QWidget 
{ 
    Q_OBJECT 

public: 

    explicit mydialog(QWidget *parent = 0); 
    virtual ~mydialog(); 
private : 

    Ui::mydialog *ui; 

}; 

#endif // MYDIALOG_H 

- mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
#include <QtCore/QtGlobal> 
#include <QMainWindow> 

QT_USE_NAMESPACE 
QT_BEGIN_NAMESPACE 
namespace Ui { 
class MainWindow; 
} 
QT_END_NAMESPACE 

class mydialog; 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

private slots: 
    void on_Start_clicked(); 

private: 
    Ui::MainWindow *ui; 
    mydialog *dialog1; 
}; 

#endif // MAINWINDOW_H 

- mydialog.cpp

#include"mydialog.h" 
#include "ui_mydialog.h" 


mydialog::mydialog(QWidget *parent) : QWidget(parent), ui(new Ui::mydialog) 
{ 
    ui->setupUi(this); 
} 


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

- mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include"mydialog.h" 


MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    dialog1 = new mydialog ; 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
    delete dialog1; 
} 

void MainWindow::on_Start_clicked() 
{ 

} 

- main.cpp中

#include"mainwindow.h" 
#include<QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

- 該.pro文件

#------------------------------------------------- 
# 
# Project created by QtCreator 2015-12-17T00:10:58 
# 
#------------------------------------------------- 

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = TestTool 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    mydialog.cpp 

HEADERS += mainwindow.h \ 
    mydialog.h 

FORMS += mainwindow.ui \ 
    mydialog.ui 

RESOURCES += \ 
    misc.qrc 

- Qt的編譯輸出錯誤

Compilation error

生成的文件Ui_mydialog.h是:

#ifndef UI_MYDIALOG_H 
#define UI_MYDIALOG_H 

#include <QtCore/QVariant> 
#include <QtWidgets/QAction> 
#include <QtWidgets/QApplication> 
#include <QtWidgets/QButtonGroup> 
#include <QtWidgets/QDialog> 
#include <QtWidgets/QDialogButtonBox> 
#include <QtWidgets/QHeaderView> 

QT_BEGIN_NAMESPACE 

class Ui_Dialog 
{ 
public: 
    QDialogButtonBox *buttonBox; 

    void setupUi(QDialog *Dialog) 
    { 
     if (Dialog->objectName().isEmpty()) 
      Dialog->setObjectName(QStringLiteral("Dialog")); 
     Dialog->resize(400, 300); 
     buttonBox = new QDialogButtonBox(Dialog); 
     buttonBox->setObjectName(QStringLiteral("buttonBox")); 
     buttonBox->setGeometry(QRect(30, 240, 341, 32)); 
     buttonBox->setOrientation(Qt::Horizontal); 
     buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); 

     retranslateUi(Dialog); 
     QObject::connect(buttonBox, SIGNAL(accepted()), Dialog, SLOT(accept())); 
     QObject::connect(buttonBox, SIGNAL(rejected()), Dialog, SLOT(reject())); 

     QMetaObject::connectSlotsByName(Dialog); 
    } // setupUi 

    void retranslateUi(QDialog *Dialog) 
    { 
     Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0)); 
    } // retranslateUi 

}; 

namespace Ui { 
    class Dialog: public Ui_Dialog {}; 
} // namespace Ui 

QT_END_NAMESPACE 

#endif // UI_MYDIALOG_H 
+2

您有一個名爲'mydialog'兩類:在'命名空間Ui'在一個全局命名空間和一個(不完全)。 –

+0

@AntonSavin,QT網站並沒有提出這樣的警告,或者給出瞭如何處理它的答案。我在QT SDK的示例中查看了終端項目,他們和我一樣。你如何在Ui命名空間中完成課程。我只有一個類 – Warrior4just

+0

也許會添加'ui_mydialog.h'文件的內容。 –

回答

2

你是混合的UI類的名稱UI文件的文件名(的對象名QtDesigner中的頂級小部件)。

例如,如果QtDesigner看起來像這樣:

enter image description here

你會得到一個類名Ui::CalculatorForm,無論的.ui文件名。

更換Ui::mydialog通過Ui::Dialog(或任何類名是在生成ui_mydialog.h文件)

相關問題