Привет Я пытаюсь сделать простой макет в 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, когда она сталкивается с ui-> setupui? – Dmon
Вы можете объявить его там, где он есть, но поскольку у FilmInput уже установлен макет, вам нужно установить макет на новый виджет, который является дочерним элементом FilmInput, чтобы они могли взаимодействовать друг с другом. В QtDesigner добавьте виджет к FilmInput (если там еще нет пустого), а в setUpGui() используйте этот новый виджет для установки вашего макета. –
Я получаю код с кодом -1073741819. Я добавил виджет, который просто оставил имя в виде виджета, а затем изменил код на это-> ui-> widget-> setLayout (layout); Я думаю, что проблема в FilmInput :: FilmInput (QWidget * parent): QMainWindow (родительский), ui (новый Ui :: FilmInput) { ui-> setupUi (this); setUpGui(); } – Dmon