2015-01-03 2 views
1

qtDesigner를 사용하여 두 개의 pushButton을 추가했습니다.이 단추는 centralWidget의 chilldren입니다. 이제 하나의 pushButton을 추가하고 싶지만 mainwindow.cpp에서 프로그래밍 방식으로 추가하고 싶습니다.Qt 기존 위젯에 단추 추가

setCentralWidget 메서드를 사용하면 qtDesigner에서 추가 한 이전의 2 개의 푸시 버튼을 제거하거나 숨 깁니다. 내 질문에 프로그래밍 방식으로이 추가 단추를 추가하는 방법입니다 그래서 그 두 pushButtons 남아?

초보자입니다.

+0

.ui 파일을 붙여 넣을 수 있습니까? – ahmed

답변

1

중앙 위젯 기본 레이아웃은 gridLayout이며 QGridLayout입니다. 이처럼 새 버튼을 추가 할 수 있습니다

mainwindow.h :

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 

class QPushButton; 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

private: 
    Ui::MainWindow *ui; 
    QPushButton *newButton; 
}; 

#endif // MAINWINDOW_H 

mainwindow.cpp :

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

#include <QPushButton> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow), 
    newButton(new QPushButton("Button 3")) 
{ 
    ui->setupUi(this); 

    const int rowNumber = 1; 
    const int colNumber = 0; 

    ui->gridLayout->addWidget(newButton, rowNumber, colNumber); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 
다음
ui->gridLayout->addWidget(new QPushButton("Button Text"), rowNumber, colNumber); 

은 예입니다

mainwindow.ui :

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>MainWindow</class> 
<widget class="QMainWindow" name="MainWindow"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>400</width> 
    <height>300</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>MainWindow</string> 
    </property> 
    <widget class="QWidget" name="centralWidget"> 
    <layout class="QGridLayout" name="gridLayout"> 
    <item row="0" column="0"> 
    <widget class="QPushButton" name="pushButton1"> 
     <property name="text"> 
     <string>Button 1</string> 
     </property> 
    </widget> 
    </item> 
    <item row="0" column="1"> 
    <widget class="QPushButton" name="pushButton2"> 
     <property name="text"> 
     <string>Button 2</string> 
     </property> 
    </widget> 
    </item> 
    </layout> 
    </widget> 
    <widget class="QMenuBar" name="menuBar"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>400</width> 
    <height>21</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QToolBar" name="mainToolBar"> 
    <attribute name="toolBarArea"> 
    <enum>TopToolBarArea</enum> 
    </attribute> 
    <attribute name="toolBarBreak"> 
    <bool>false</bool> 
    </attribute> 
    </widget> 
    <widget class="QStatusBar" name="statusBar"/> 
</widget> 
<layoutdefault spacing="6" margin="11"/> 
<resources/> 
<connections/> 
</ui> 

행운을 빈다!

+0

흠, 당신은 그것을 믿을 수 있습니다, 나는 기본적으로이 QGridLayout을 가지고 있지 않습니다. 어떻게 든 이걸 추가해야합니까? 새로운 프로젝트를 열 때마다 mainwindow.ui 코드를 복사하고 싶지 않습니다. – user3700021

+0

@ user3700021 'centralWidget'에 대해 선택한 레이아웃 유형에 따라 다릅니다. 가로 레이아웃 (QHBoxLayout)을 사용하는 경우 'horizontalLayout'이거나 세로 레이아웃 (QVBoxLayout)을 사용하는 경우 'verticalLayout'이 될 수 있습니다. 예제에서는 그리드 레이아웃을 사용했기 때문에 객체가'gridLayout'으로되어 있습니다. '* .ui' 파일에서 생성 된 클래스에 대한 자세한 내용은 생성 된'* _ui.h' 파일을 사용해보십시오. – Iuliu

+0

그래서 centralWidget에 추가 버튼을 직접 추가 할 수는 없습니까? 배치가 있어야 하나? – user3700021

관련 문제