2013-08-21 2 views
0

Qt로 시작하고 뭔가 이해가되지 않습니다. 여기 내 코드는 다음과 같습니다.QPushButton 메인 Guy

#include <QApplication> 
#include <QtWebKitWidgets/QWebView> 
#include <QMainWindow> 
#include <QPushButton> 

    QApplication a(argc, argv); 
    QMainWindow *mWin = new QMainWindow(); 
    QPushButton *button = new QPushButton("Button"); 

    button->setGeometry(0,0,128,56); 
    button->show(); 

    mWin->setGeometry(QRect(300,300,1024,640)); 
    mWin->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint); 
    mWin->show(); 

    return a.exec(); 

프로그램을 실행하면 푸시 버튼이 생기지 만 기본 GUI에서는 실행되지 않습니다. 대신 내 숟가락의 왼쪽 상단에 있습니다. 기본 GUI의 푸시 버튼 부분을 어떻게 만들 수 있습니까?

답변

2

QMainWindow와 QPushButton 모두 QWidget에서 파생되며 일반적으로 QWidgets는 자체적으로 표시 할 수 있으므로 부모에게 연결하지 않아도됩니다.하지만 제시 할 위젯을 그룹화하고 구성하려는 경우가 많습니다 사용자.

초보자는 실제로 위젯을 표시 할 필요가 없기 때문에 QMainWindow가 약간 오도 된 것 같습니다. 당신이 실제로 이렇게 할거야 드문

QPushButton pButton = new QPushButton("Test"); 
pButton->show(); 

하지만 - : 예를 들어, 당신은 단지 버튼을 표시하고 싶다면, 당신은 단지 QPushButton을하고 전화 쇼를 만들 필요가있다. 그것은 무의미 표시하지만 실제로, 당신은 심지어 단지는 QWidget을 생성하고 표시 할 수 있습니다 : -

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QWidget w; 
    w.show(); 
    return a.exec(); 
} 

는 QWidget은 이제 모든 다른 위젯에 부모가 될 수 있고, 여전히 당신은 QMainWindow를 정의하지 않고.

다른 위젯을 표시하고 Qt가 그들을 연결하는 부모/자식 계층 구조 시스템을 사용하기를 원할 것 같습니다.그 중에서도 장점은 메모리를 해제하기 위해 다른 위젯을 추적 할 필요가 없다는 것입니다. 작업이 끝나면 최상위 항목 인 QMainWidget 또는 QDialog 또는 다른 QWidget 기반 객체 만 삭제하면됩니다. Windows의 경우, 닫기 만하면됩니다. 자녀도 정리됩니다. QMainWindow에

추가 위젯은 당신이 달성하려고하는지에 따라 다른 방법으로 수행 할 수 있습니다. 결국, 당신은 가능성이 논리적 배열에서 위젯의 그룹화 허용 레이아웃을 사용하는,하지만 당신은 QPushButton을의 생성자를 보면, 당신이는 QWidget의 선택적 매개 변수를 볼 수 있습니다로 시작하는 것이 좋습니다 * : -

QPushButton(QWidget * parent = 0) 

작성중인 위젯 (이 경우 QPushButton)을 상위에 첨부 할 수 있습니다. 따라서 QMainWindow를 만든 다음 포인터를 QPushButton에 전달하십시오.

QMainWindow* pWindow = new QMainWindow; // create the main window 
QPushButton pButton = new QPushButton(pWindow); // create the push button 

pWindow->show(); // Display the main window and its children. 
0

단추와 창을 만들었지 만 함께 연결하지는 않습니다. 따라서이 단추는 기본 UI의 일부가 아닙니다. 메인 창에있는 버튼을 추가하려면, 당신은

mWin->setCentralWidget(button); 

Qt를 사용하여 사용자 인터페이스의 작성, 명시 적 형상을 설정하지 않도록하는 것이 좋습니다 라인 - 다음을 추가한다. Here은 Qt의 레이아웃을 설명하는 멋진 페이지입니다.

또한 주요 기능이 누락 된 것 같습니다.

0

부모 자식 관계를 설정하지 않았 으면 QPushbutton을 QMainwindow의 자식으로 사용해야합니다. 그러면 QMainwindow에서 QPushbutton을 볼 수 있습니다.

당신이 진행하는 방법에 대한 몇 가지 뒷다리를 줄 것이다 코드 아래 achive..but 할 정확하게 확실하지 않다, 이것을 시도하십시오 ..

QApplication a(argc, argv); 
    QMainWindow *mWin = new QMainWindow(); 
    QPushButton *button = new QPushButton(mWin); // setting parent as QMainwindow 
    button->setGeometry(0,0,128,56); 
    // button->show(); 
//mWin->setCentralWidget(button); 

    mWin->setGeometry(QRect(300,300,1024,640)); 
    mWin->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint); 
    mWin->show() 

을;

0

기본 창에 대한 중앙 위젯을 작성한 다음 배치를 사용하여 중앙 위젯에 누름 단추를 배치하십시오. 예를 들어 :

(다른 답변 중 하나가 표시된 것처럼, 중앙 위젯 자체 또는) 당신이 레이아웃에 이런 식으로 당신의 버튼을 배치 한 경우
QMainWindow *mWin = new QMainWindow(); 

// Place the button in a layout 
QHBoxLayout *layout = new QHBoxLayout; 
QPushButton *button = new QPushButton("Button"); 
layout->addWidget(button); 

// Set up a central widget for the main window 
QWidget *centralWidget = new QWidget(); 
centralWidget->setLayout(layout); 
mWin->setCentralWidget(centralWidget); 

, 당신의 형상을 설정할 필요가 없습니다 버튼을 누르거나 명시 적으로 버튼에 setVisible 또는 show을 호출해야합니다 (기본 창에서 계속해야 함).

자세한 내용은 application example과 같은 Qt의 예를 살펴 보시기 바랍니다.