학기 시험실 시험을 위해 우리는 다른 카테고리의 모든 프로그램을 나열하고 하나를 클릭 할 때 열리는 GUI를 만들어야합니다. 저는 GUI 프로그래밍을 잘 모르지만 C++의 기초를 알고 있으며 Qt가 시작하기에 좋은 선택이라고 생각했습니다. QtCreator로 작업 중이며 꽤 매끄러운 도구처럼 보입니다.기본 GUI를 디자인하기 위해 Qt 시작하기 도움말
내가 달성하고자하는 것은 버튼을 클릭 할 때 주 윈도우가 숨겨져 있어야하고 해당 카테고리의 윈도우가 필요한 프로그램을 실행할 위치에서 표시되어야한다는 것입니다. QWidget에서 MainWidget과 ProcessWidget을 상속받은 두 개의 다른 클래스를 사용하여 주 윈도우와 프로세스 관리 카테고리를 각각 사용하고 있습니다. 다른 카테고리의 위젯을 추가 할 계획이지만 이러한 개별 위젯을 어떻게 붙일 수 있을지는 명확하지 않습니다.
내가 선택한 디자인 선택은 적절하지 않으며, 적절한 디자인 선택을 확신하지 못합니다. 이것에 관한 도움을 많이 주시면 감사하겠습니다, 내가 사용하고있는 모든 파일의 내용은 아래에 첨부되어 있습니다.
homewidget.h
#ifndef HOMEWIDGET_H
#define HOMEWIDGET_H
#include <QtGui/QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include "processwidget.h"
class HomeWidget : public QWidget
{
Q_OBJECT
private:
QVBoxLayout *main_layout;
QHBoxLayout *footer;
QLabel *header,*footer_text;
QPushButton *process_mgt,*file_mgt;
QWidget *target;
public:
HomeWidget(QWidget *parent = 0);
~HomeWidget();
private slots:
void process_management_slot(QWidget *qw);
};
#endif // HOMEWIDGET_H
homewidget.cpp
#include "homewidget.h"
HomeWidget::HomeWidget(QWidget *parent)
: QWidget(parent)
{
main_layout = new QVBoxLayout();
footer = new QHBoxLayout();
header = new QLabel("<i>MCA Semester 2</i>\nOS LAB Record");
footer_text = new QLabel("Made By :\n\t Nikhil Bhardwaj");
process_mgt = new QPushButton("Process Management");
file_mgt = new QPushButton("File Management");
setWindowTitle("Operating Systems Lab, MCA NITT 2011");
footer->addStretch();
footer->addWidget(footer_text);
main_layout->addWidget(header);
main_layout->addStretch();
main_layout->addWidget(process_mgt);
main_layout->addWidget(file_mgt);
main_layout->addStretch();
main_layout->addLayout(footer);
setLayout(main_layout);
connect(process_mgt,SIGNAL(clicked()),this,SLOT(process_management_slot(process_widget)));
}
HomeWidget::~HomeWidget()
{
}
void HomeWidget::process_management_slot(QWidget *qw)
{
this->hide();
target = qw;
target->show();
}
processwidget.h
#ifndef PROCESSWIDGET_H
#define PROCESSWIDGET_H
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
class ProcessWidget : public QWidget
{
Q_OBJECT
private:
QVBoxLayout *process_layout;
QHBoxLayout *process_footer;
QLabel *process_header,*process_footer_text;
QPushButton *back,*scheduling,*synchronization,*bankers;
public:
ProcessWidget(QWidget *parent = 0);
signals:
public slots:
};
#endif // PROCESSWIDGET_H
processwidget.cpp
#include "processwidget.h"
ProcessWidget::ProcessWidget(QWidget *parent) :
QWidget(parent)
{
process_layout = new QVBoxLayout();
process_footer = new QHBoxLayout();
process_header = new QLabel("<i>MCA Semester 2</i>\nOS LAB Record");
process_footer_text = new QLabel("Made By :\n\t Nikhil Bhardwaj");
back = new QPushButton("Main Menu");
scheduling = new QPushButton("Scheduling Algorithms");
setWindowTitle("Operating Systems Lab, Process Management");
process_footer->addStretch();
process_footer->addWidget(process_footer_text);
process_layout->addWidget(process_header);
process_layout->addStretch();
process_layout->addWidget(scheduling);
process_layout->addWidget(back);
process_layout->addStretch();
process_layout->addLayout(process_footer);
setLayout(process_layout);
}
,
MAIN.CPP
#include <QtGui/QApplication>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include "homewidget.h"
#include "processwidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
HomeWidget *main_widget = new HomeWidget();
ProcessWidget *process_widget = new ProcessWidget();
main_widget->show();
return a.exec();
}
마지막 final_gui.pro
#-------------------------------------------------
#
# Project created by QtCreator 2011-04-15T06:37:21
#
#-------------------------------------------------
QT += core gui
TARGET = final_gui
TEMPLATE = app
SOURCES += main.cpp\
homewidget.cpp \
processwidget.cpp
HEADERS += homewidget.h \
processwidget.h
나는 내 문제를 설명에서 명확하지 않은 경우 명확히하기 위해보다 더 행복을 수 있습니다.
이것은 매우 유망한 것으로 보입니다. 하지만 정확히 어떻게 위젯을 전환합니까? – nikhil
필자가 링크 된 문서에서 (예제도 제공합니다), setCurrentIndex 또는 setCurrentWidget 함수를 사용합니다. 대부분의 경우 이러한 슬롯 중 하나를 컨트롤 중 하나에서 방출되는 신호에 연결합니다. – Colin