Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 25.02.2017
Сообщений: 6
1

Демонстрационная программа

19.03.2017, 15:38. Просмотров 297. Ответов 4
Метки нет (Все метки)

Доброго времени суток!
Требуется создать демонстрационную программу.
Суть заключается в следующем. Есть три объекта One, Two, Three. Two принимает решение о возможности пропуска (движения) One к Three. Решение положительное, если счётчик (counter) у Two отличен от нуля и Three свободен (free = true).

У меня возникло несколько проблем.
1. В выводе приложения в Qt выводится "C:\One\Debug\debug\One.exe завершился крахом". Это связано с неправильным удалением One, Two и Three?
2. Если One привязать к Layout (как в листинге, рисунок 1), то он не двигается, а если показывать через one->show() (рисунок 2), то появляется как новое окно. Как сделать, чтобы все объекты отображались в одном окне и двигались (иерархия объектов на форме на рисунке 3)?
3. Как вывести значение one->counter (всплывающее окно, например)?

Всем спасибо за ответы!

Листинг.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//essense.h
#ifndef ESSENSE_H
#define ESSENSE_H
#include <QWidget>
#include <QLabel>
class Essense : public QLabel
{
public:
    Essense();
    explicit Essense(QWidget *parent);
    ~Essense();
 
    void signal(Essense* essense);
    void wait(Essense* essenseOne, Essense* essenseThree);
 
    int counter;    //счётчик процессов в очереди
    bool free;      //ресурсы доступны
 
};
#endif // ESSENSE_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//essense.cpp
#include "essense.h"
Essense::Essense()
{
    counter = 0;
    free = true;
}
 
Essense::~Essense()
{
    delete this;
}
 
//увеличивает значение счётчика
void Essense::signal(Essense* essense)  
{
    essense->counter++;
}
 
/*вызывается у Two
  если Three свободен (free=true), то One двигается к нему*/
void Essense::wait(Essense* essenseOne, Essense* essenseThree)
{
    if(essenseThree->free == true)
    {
        essenseOne->move(essenseOne->x()+50, essenseOne->y());
        this->counter--;
    }
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "essense.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    Essense* one = new Essense;
    Essense* two = new Essense;
    Essense* three = new Essense;
 
    ui->horizontalUpOne->addWidget(one);
    one->setText("One");
    one->setAlignment(Qt::AlignCenter);
    one->setStyleSheet("background-color: NavajoWhite");
 
    ui->horizontalUpTwo->addWidget(two);
    two->setText("Two");
    two->setAlignment(Qt::AlignCenter);
    two->setStyleSheet("background-color: PowderBlue");
 
    ui->horizontalUpThree->addWidget(three);
    three->setText("Three");
    three->setAlignment(Qt::AlignCenter);
    three->setStyleSheet("background-color: GreenYellow");
 
    one->signal(two);
    two->wait(one,three);
}
 
MainWindow::~MainWindow()
{
    delete ui;
 
}
0
Миниатюры
Демонстрационная программа   Демонстрационная программа   Демонстрационная программа  

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2017, 15:38
Ответы с готовыми решениями:

Демонстрационная программа
Вот программа,но не рабочая..помогите найти ошибку и сделать ее рабочей,а да,еще объясните что за...

Демонстрационная программа класса вектор
Здравствуйте уважаемые эксперты! Вот пишу программу, которая демонстрирует работу класса вектор,...

Демонстрационная программа создания и уничтожения процессов
Помогите пожалуйста как можно исправить программу Приложение 2 //демонстрационная программа...

Демонстрационная программа сортировки методом «пузырек»
Демонстрационная программа сортировки методом «пузырек» Размер массива не превышает 40 и задается с...

4
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.03.2017, 19:09 2
Для Essense конструктор нормальный сделай. Убери этот самодельный. Оставь тот, который с explicit, и вызывай наследуемый от QLabel.
А signal() почему чужой счётчик увеличивает?
0
566 / 377 / 144
Регистрация: 01.10.2015
Сообщений: 1,133
20.03.2017, 19:13 3
Цитата Сообщение от norwegianbeauty Посмотреть сообщение
2. Если One привязать к Layout (как в листинге, рисунок 1), то он не двигается, а если показывать через one->show() (рисунок 2), то появляется как новое окно. Как сделать, чтобы все объекты отображались в одном окне и двигались (иерархия объектов на форме на рисунке 3)?
Вы ведь уже создавали тему с вопросом по анимации? Что мешает использовать?
0
0 / 0 / 0
Регистрация: 25.02.2017
Сообщений: 6
22.03.2017, 12:56  [ТС] 4
nmcf, такое задание.

nmcf, 0x90h, спасибо за ответы.
0
566 / 377 / 144
Регистрация: 01.10.2015
Сообщений: 1,133
22.03.2017, 13:05 5
Цитата Сообщение от norwegianbeauty Посмотреть сообщение
такое задание
Прямо так и сформулировано?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2017, 13:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Beko WB 9000 Orbital - демонстрационная модель
Очень понравилась конструкция этой машинки, хоть по виду ей уже лет ...надцать, но сконструирована...

Нужна демонстрационная версия Windows XP (желательно SP3)
Для проверки работы компьютеров нужен дистрибутив Windows, но не активированный. Чтобы...

Ремонт ПММ BOSCH SMS99T99/02 FD 8805 00068, демонстрационная! Можно ли перепрошить или войти в сервис
Приехала из Дании. Врезано оргсткло, качественно, почти как на заводе. Сделана подсветка. Я...

Программа не может быть запущена, т.к. на Вашем компьютере установлена программа-эмулятор
При запуске лицензионной детской игровой программы выскакивает сообщение: Программа не может быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.