Помогите начать работу с Qt для разработки базового графического интерфейса - PullRequest
0 голосов
/ 18 апреля 2011

Для нашего семестрового лабораторного экзамена нам нужно создать графический интерфейс, который перечисляет все программы в разных категориях и открывает их, когда мы нажимаем на одну из них.Я на самом деле не знаю программирования на GUI, но знаю основы C ++ и думал, что Qt будет хорошим выбором для начала.Я работаю с QtCreator, и это похоже на довольно изящный инструмент.

Я пытаюсь добиться того, чтобы при нажатии кнопки главное окно было скрыто, а окно соответствующей категории -будет показано, где я буду выполнять необходимую программу.Я использую два разных класса, которые наследуют от QWidget HomeWidget и 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

Я буду более чем рад уточнить, если я не совсем ясно объяснил свою проблему.

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Посмотрите на QStackedWidget (http://doc.qt.nokia.com/latest/qstackedwidget.html). Если вы сделаете QStackedWidget основным виджетом для вашего окна, а затем поместите HomeWidget и ProcessWidget в QStackedWidget, это позволит вам переключать отображаемый виджет.

0 голосов
/ 18 апреля 2011

Я думаю, вам вообще не нужен ProcessWidget. Вам может понадобиться MainWidget (в основном для указания лабораторных свойств, таких как имя, описание задачи и т. Д.).

Вы можете использовать QFileDialog для поиска исполняемых файлов (или любого другого типа файлов, который вы хотите).

Для запуска этих файлов вы можете использовать QProcess .

Ссылка на Qt для данных классов может дать вам больше дополнительной информации, чем кто-либо другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...