2015-02-06 66 views
0

所以這是main.cpp中的代碼:「Hello World」的Qt的閉幕前一個窗口

#include <QApplication> 
#include <QtGui> 
#include <mainwidget.h> 

int main(int argc, char **argv) 
{ 
QPushButton button ("Hello world!"); 
button.show(); 

mainWidget widget; 
widget.show(); 

return app.exec(); 
} 

我想從「小部件」按鈕來關閉窗口。我已經在「widget」中添加了該按鈕,並在mainwidget.h(它也顯示了一個消息框)中爲它創建了一個函數並將它們連接起來。我只想知道該按鈕如何關閉Hello World窗口。我想我必須在mainwidget.h中的函數中添加一些東西,但我不知道它是什麼。教師說我們應該使用QWidget的close()函數。

回答

2

我會回答你的問題,但在我將解釋你是如何基本的Qt應用程序看起來像。

在Qt中,一個基本的主要是這樣的:

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

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

    return a.exec(); 
} 

在這裏,你可以看到一個QApplication的創建則主窗口。 那麼MainWindow類是什麼?

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

#endif // MAINWINDOW_H 

這是MainWindow.h。正如你所看到的MainWindow繼承到QMainWindow類。這是創建圖形用戶界面的主窗口類。 Q_OBJECT定義爲Qmake。的確,qmake我會爲這個類創建一個moc_mainwindow.cpp來管理Qt信號。 現在,如果你創建一個空的構造和析構像你得到一個空的窗口:「世界,你好」你希望寫後

#include "mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
} 

MainWindow::~MainWindow() 
{ 
} 

然後在Qt窗口中編寫文本,你可以使用QLabel。所以要寫「Hello World!」你得到:

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

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QWidget *widget = new QLabel("Hello world !", this); 
} 

MainWindow::~MainWindow() 
{ 
} 

然後在創建按鈕後,你會使用QPushButton類。 等你拿:

#include "mainwindow.h" 
#include <QLabel> 
#include <QPushButton> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QWidget *widget = new QLabel("Hello world !", this); 
    setCentralWidget(widget); 
    QPushButton *button = new QPushButton("close", this); 
} 

MainWindow::~MainWindow() 
{ 
} 

(我選擇將QLabel設置到中央的Widget做不了後面的按鈕,但之後並實時Qt應用程序QMainWindow中的核心部件主要是usualy一個QWidget我的標籤我會解釋你爲什麼後) 現在你有一個按鈕。但是當你點擊它時什麼都沒有追加。 爲什麼?因爲沒有鏈接按鈕和窗口。要在Qt中鏈接它,我們使用connect函數。 [http://qt-project.org/doc/qt-4.8/qobject.html][1]

所以用連接關閉窗口,當你點擊你的按鈕:

#include "mainwindow.h" 
#include <QLabel> 
#include <QPushButton> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QWidget *widget = new QLabel("Hello world !", this); 
    setCentralWidget(widget); 
    QPushButton *button = new QPushButton("close", this); 
    connect(button, SIGNAL(clicked()), this, SLOT(close())); 
} 

MainWindow::~MainWindow() 
{ 
} 

正如你可以看到連接。在第一個參數中,我們把發送信號的對象放在這個按鈕上。在第二個參數中,我們把信號鏈接到這裏它被點擊()來做到這一點,我們寫信號(點擊())。第三,將接收信號的對象,在這裏窗口關閉。第四個參數是收到信號時啓動的功能。我們寫這個SLOT(close())。

爲什麼SIGNAL和SLOT?因爲Qt來創建一個信號,我們使用的信號:在.hh和要創建插槽等的使用(公共或受保護或私有)插槽: 例如:

Class Object 
{ 
Q_OBJECT 
... 
signals: 
    void aSignal(); 
public slots: 
    void aSlot(); 
... 
}; 

注:信號和槽必須有相同的回報和參數。

後整理的對象,所以你有,你會使用在QWidget的標籤在centralWidget:

#include "mainwindow.h" 
#include <QLabel> 
#include <QPushButton> 
#include <QVBoxLayout> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QWidget* centralWid = new QWidget(this); 
    setCentralWidget(centralWid); 

    QVBoxLayout *layout = new QVBoxLayout(centralWid); 
    QWidget *widget = new QLabel("Hello world !", this); 
    QPushButton *button = new QPushButton("close", this); 
    layout->addWidget(widget); 
    layout->addWidget(button); 
    centralWid->setLayout(layout); 

    connect(button, SIGNAL(clicked()), this, SLOT(close())); 
} 

MainWindow::~MainWindow() 
{ 
} 
+0

這是真正有用的!謝啦! – user3573594 2015-02-24 00:27:23