안녕하세요. Qt에서 간단한 레이아웃을 만들기 위해 노력하고 있습니다. 먼저 모든 레이아웃이 제대로 작동하지 않습니다. 모두 취소 버튼이었습니다. 그래서 나는 주위를 어지럽 혔고 지금은 그것을 실행하면 오류없이 실행되지만 창문이 튀어 나옵니다. 왜 이런 일을 할 수 있었는지 모르십니까? 다음은 여기에 충돌하는 일이 마치 내 코드Qt 프로그램이 표시되지 않습니다.
#ifndef FILMINPUT_H
#define FILMINPUT_H
#include <QMainWindow>
#include "Film.h"
#include "FilmWriter.h"
#include <QLabel>
#include <QTextEdit>
#include <QPushButton>
namespace Ui {
class FilmInput;
}
class FilmInput : public QMainWindow
{
Q_OBJECT
public:
explicit FilmInput(QWidget *parent = 0);
~FilmInput();
private:
Ui::FilmInput *ui;
//widgets
QMainWindow* window;
QMenuBar* menubar;
QLabel* infoLabel;
QLabel* titleLabel;
QLabel* durationLabel;
QLabel* directorLabel;
QLabel* relDateLabel;
QTextEdit* titleEdit;
QTextEdit* durationEdit;
QTextEdit* directorEdit;
QTextEdit* relDateEdit;
QPushButton* saveBtn;
QPushButton* cancelBtn;
Film f;
//sets up gui and connects signals and slots
void setUpGui();
};
#endif // FILMINPUT_H
#include "filminput.h"
#include "ui_filminput.h"
#include <QtGui>
FilmInput::FilmInput(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::FilmInput)
{
ui->setupUi(this);
setUpGui();
}
FilmInput::~FilmInput()
{
delete ui;
}
void FilmInput::setUpGui(){
//initialise widgets
infoLabel = new QLabel("Please enter film data which will be saved to a file",this);
titleLabel = new QLabel("Film Title",this);
durationLabel = new QLabel("Film Duration",this);
directorLabel = new QLabel("Film Director",this);
relDateLabel = new QLabel("Film Release Date",this);
titleEdit = new QTextEdit(this);
durationEdit = new QTextEdit(this);
directorEdit = new QTextEdit(this);
relDateEdit = new QTextEdit(this);
saveBtn = new QPushButton("Save Film",this);
cancelBtn = new QPushButton("Cancel",this);
//set layout
QVBoxLayout* layout = new QVBoxLayout();
layout->setMenuBar(menubar);
layout->addWidget(infoLabel);
layout->addWidget(titleLabel);
layout->addWidget(durationLabel);
layout->addWidget(directorLabel);
layout->addWidget(relDateLabel);
layout->addWidget(titleEdit);
layout->addWidget(durationEdit);
layout->addWidget(directorEdit);
layout->addWidget(relDateEdit);
layout->addWidget(saveBtn);
layout->addWidget(cancelBtn);
this->setLayout(layout);
this->setWindowTitle("Film Archive");
}
#include <QtGui/QApplication>
#include "filminput.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FilmInput w;
w.show();
return a.exec();
}
도움을 주셔서 감사합니다. 이제 setUpGui 기능을 어디에서 호출해야합니까? – Dmon
그 위치를 선언 할 수는 있지만, 이미 FilmInput에 레이아웃이 설정되어 있기 때문에 함께 상호 작용할 수 있도록 레이아웃을 FilmInput의 하위 요소 인 새 위젯으로 설정해야합니다. QtDesigner에서 FilmInput에 위젯을 추가하고 (아직 비어 있지 않은 경우) setUpGui()에서 새 위젯을 사용하여 레이아웃을 설정합니다. –
코드 -1073741819로 종료되었습니다 위젯을 위젯으로 추가 한 다음이 코드를 this-> ui-> widget-> setLayout (layout);으로 변경했습니다. 나는 문제가 FilmInput :: FilmInput (QWidget * parent)에 있다고 생각한다. QMainWindow (부모), ui (새로운 Ui :: FilmInput) { ui-> setupUi (this); setUpGui(); } – Dmon