현재 기본 학교 프로젝트를 진행하고 있으며 현재 발생하고있는 문제를 해결하는 방법을 알 수 없습니다. 저는 C++과 Qt 모두 초보자입니다. 그래서 오류는 사소한 것일 수 있습니다. (그리고 제가되고 싶습니다!)레이아웃이 설정되어 있지만 QWidget이 여전히 비어 있습니다.
최근에 개발 한 클래스를 사용하려고합니다. 기사 편집자. 이 클래스는 QWidget에서 상속 받았으며 기본적으로 기사 (제목 및 텍스트)를 편집하고 수정 사항을 저장할 수있는 작은 창을 의미합니다. 현재로서는이 클래스를 기본 방식으로 사용하고 ArticleEditor의 인스턴스를 만들어 main.cpp 파일에 표시하지만 이제는 더 까다로운 작업을하려고합니다.
요점은 파일을 가져온 후 ArticleEditor 위젯/창을 여는 것입니다. 문제없이 파일 선택 부분을 얻었지만 파일을 선택하면 ArticleEditor 위젯이 열리면서 완전히 비어 있습니다. 생성자 내부에서 setSize에 설정 한 크기가 고려되지만, 레이아웃에 설정하고 추가하는 위젯은 생성자에서도 나타나지 않으며 표시되지 않습니다. 당신은 두 개의 텍스트 필드 중 하나 saveArticle를 편집 할 때이 버튼을 저장할 수 있도록하기위한 것입니다 enableSave() :
ArticleEditor.cpp : 여기
은 상황을 이해하는 데 도움이됩니다 내 코드입니다()는 여기에서 중요하지 않은 또 다른 메소드입니다.ArticleEditor::ArticleEditor(Article* article, QWidget *parent) :
QWidget(parent)
{
title = new QLineEdit();
title->setFixedWidth(180);
title->move(10,10);
text = new QTextEdit();
text->setFixedSize(180,110);
text->move(10,45);
save = new QPushButton();
save->setText("Save");
save->setFixedWidth(80);
save->move(10,170);
save->setEnabled(false);
title->setText(article->getTitle());
text->setText(article->getText());
QObject::connect(save, SIGNAL(clicked()), this, SLOT(saveArticle()));
QObject::connect(title, SIGNAL(textChanged(const QString)), this, SLOT(enableSave()));
QObject::connect(text, SIGNAL(textChanged()), this, SLOT(enableSave()));
layout = new QVBoxLayout;
layout->addWidget(title);
layout->addWidget(text);
layout->addWidget(save);
this->setFixedSize(200,200);
this->setLayout(layout);
}
ArticleEditor.h
class ArticleEditor : public QWidget
{
Q_OBJECT
public:
explicit ArticleEditor(Article* article, QWidget* parent);
private:
QLineEdit* title;
QTextEdit* text;
QPushButton* save;
QVBoxLayout* layout;
Article* ressource;
public slots:
void saveArticle();
void enableSave();
private slots:
};
파일을 따기 후 (나는 거 아니에요 경로를 얻는 것은 이미 잘 작동하기 때문에이에 대한 세부 정보를 제공), 내가 좋아하는 일을 수행
를ArticleEditor aE(&a, articleWidget); // calling the constructor with an article I've fetched using the path, and setting articleWidget (a private attribute) to be the parent
articleWidget->show(); // showing the result
여기서 articleWidget은 내 클래스의 속성으로 articleEditor 인스턴스의 상위 위젯으로 만들어졌습니다.
또한이 레이아웃을 상위 위젯 (parent-> setLayout (layout) 대신 this-> setLayout (layout))으로 직접 설정하려고 시도했지만, 이렇게 할 때마다 위젯의 내용이 표시되지만 신호/슬롯 연결은 누군가가 내가 잘못 걸 설명 할 수 있다면
, 나는 매우 감사하게 될 거라고 ... 더 이상 작동하지 않습니다
편집이 :. 난 그냥 후에도이 위젯을 추가하는 것으로 나타났습니다 내 레이아웃에서 layout-> isEmpty()를 호출하면 반환 값으로 true가됩니다 ...
당신은뿐만 아니라 (이동 없애 수)이 호출을 - QVBoxLayout는 위치를 변경하는 것입니다 어쨌든 당신이 그것에 추가 한 위젯. –
고마워, 나는 그 여분의 선을 지금 제거하는 것을 잊었다. –
테스트 응용 프로그램을 만들었습니다. 모든 것이 나를 위해 작동합니다. – Shf