Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2013, 12:04   #1
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию GUI в С++. Boots и Qt. Что использовать?

Получил примерное задание на курсовой проект. Надо создать либо игру, либо табличный или текстовый редактор. До этого работал только с консольными программками.
Посоветовали использовать Boots или Qt. Как мне быть? С английским туго. В основном поддержка на английском.
Qt в инете найти не могу. То ли устанавливается отдельно, то ли интегрируется в VS.
Прошу помощи с началом работ с GUI на С++. Где скачать, как установить, как работать
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 08.01.2013, 19:30   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Привет!

Могу вам помочь в этой теме с началом работы.

Для начала, проделайте следующее:

- скачайте и установите Qt С++ SDK: http://qt-project.org/downloads Если у вас Window, то скачайте "Qt libraries 4.8.4 for Windows (minGW 4.4, 317 MB)" Я с версией 5.0.0 не работал

Как установите, то отпишитесь здесь

Иван
8Observer8 вне форума Ответить с цитированием
Старый 13.01.2013, 11:05   #3
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Привет!

Могу вам помочь в этой теме с началом работы.

Для начала, проделайте следующее:

- скачайте и установите Qt С++ SDK: http://qt-project.org/downloads Если у вас Window, то скачайте "Qt libraries 4.8.4 for Windows (minGW 4.4, 317 MB)" Я с версией 5.0.0 не работал

Как установите, то отпишитесь здесь

Иван
уже установил и пробовал вывести текст через QLabel только русский не получается нормально выводить. В MVS настроить смог, а тут так и не понял как
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 13.01.2013, 11:39   #4
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Если считывать текст из файла средствами Qt, то в формах будет нормально отображаться русский текст, к тому же писать тексты в исходниках является правилами плохого тона.
Код:
#include <QtGui>

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QString label_text;
    QLabel hello;

    QString filename = "texts.txt";
    QFile file;
    file.setFileName(filename);
    if(!file.exists())
    {
        label_text = "Fail textov ne naiden";
    }
    else
    {
        file.open(QIODevice::ReadOnly);
        QTextStream stream;
        stream.setDevice(&file);

        stream>>label_text;

        file.close();
    }

    hello.setText(label_text);
    hello.show();

    return app.exec();
}
Изображения
Тип файла: jpg QC4dCdvt-LE.jpg (95.3 Кб, 127 просмотров)

Последний раз редактировалось Hemul; 13.01.2013 в 11:42.
Hemul вне форума Ответить с цитированием
Старый 13.01.2013, 12:00   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Цитата:
Сообщение от Артём Волжанкин Посмотреть сообщение
уже установил и пробовал вывести текст через QLabel
Отлично! Чуть позже вам примерчик подкину.

Цитата:
Сообщение от Артём Волжанкин Посмотреть сообщение
только русский не получается нормально выводить.
У меня тоже так и не получилось. Я писал по этому поводу вот в этой теме: http://www.programmersforum.ru/showthread.php?t=217125

Выход я нашёл простой. Я не использую русский в своих программах (даже комментарии пишу на кривом английском, благодаря http://translate.google.com/). Английский знаю очень плохо. В школе и универе изучал немецкий. А английский учу своими силами последние 2-3 года по этой книжке: http://www.ozon.ru/context/detail/id/7323620/ . Пользуюсь http://translate.google.com/ и Словарём Lingvo 12

Наверняка вы учите английский, поэтому вам с головой хватит http://translate.google.com/ Даже если вы его очень плохо знаете (как я)

Цитата:
Сообщение от Артём Волжанкин Посмотреть сообщение
В MVS настроить смог, а тут так и не понял как
Зачем вам ещё что-то настраивать если и так всё норм? Вы же запускали программу
8Observer8 вне форума Ответить с цитированием
Старый 13.01.2013, 13:52   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Первая базовая вещь - это Layout'ы. Поотдельности рассмотрим QVBoxLayout, QHBoxLayout, QGrigLayout

- запускаем Qt Creator

- в меню File выбираем New File or Project...

- выбираем в панели слева Other Project. A в панели справа Empty Qt Project

- нажимаем кнопку Choose...

- вводим имя проекта Layouts. И выбираем каталог для проекта

- далее нажимаем -> Next -> Next - Finish

ПКМ - правая кнопка мыши

- ПКМ по названию проекта на панели слева

- выбираем Add New...

- на панели слева выбираем С++. А на панели справа выбираем C++ Source File. Нажимаем Choose...

- вводим имя main. Нажимаем Next. И нажимаем Finish

Теперь поочерёдно пробуйте следующие примеры:

QVBoxLayout



main.cpp
Код:
#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QLabel *lable1 = new QLabel("One");
    QLabel *lable2 = new QLabel("Two");
    QLabel *lable3 = new QLabel("Three");

    QWidget widget;

    QVBoxLayout *layout = new QVBoxLayout(&widget);

    layout->addWidget(lable1);
    layout->addWidget(lable2);
    layout->addWidget(lable3);

    widget.show();

    return app.exec();
}
QHBoxLayout



main.cpp
Код:
#include <QApplication>
#include <QLabel>
#include <QHBoxLayout>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QLabel *lable1 = new QLabel("One");
    QLabel *lable2 = new QLabel("Two");
    QLabel *lable3 = new QLabel("Three");

    QWidget widget;

    QHBoxLayout *layout = new QHBoxLayout(&widget);

    layout->addWidget(lable1);
    layout->addWidget(lable2);
    layout->addWidget(lable3);

    widget.show();

    return app.exec();
}
QGrigLayout



main.cpp
Код:
#include <QApplication>
#include <QLabel>
#include <QGridLayout>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QLabel *lable1 = new QLabel("One");
    QLabel *lable2 = new QLabel("Two");
    QLabel *lable3 = new QLabel("Three");
    QLabel *lable4 = new QLabel("Four");
    QLabel *lable5 = new QLabel("Five");
    QLabel *lable6 = new QLabel("Six");

    QWidget widget;

    QGridLayout *layout = new QGridLayout(&widget);

    layout->addWidget(lable1, 0, 0);
    layout->addWidget(lable2, 0, 1);
    layout->addWidget(lable3, 1, 0);
    layout->addWidget(lable4, 1, 1);
    layout->addWidget(lable5, 2, 0);
    layout->addWidget(lable6, 2, 1);

    widget.show();

    return app.exec();
}
P.S. Задавайте вопросы по коду, если что-то неясно
P.S.S У меня ещё есть идеи. Я позже покажу. Пока с этим разберитесь
8Observer8 вне форума Ответить с цитированием
Старый 14.01.2013, 11:34   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Вторым по важности в GUI идёт диалоговое окно

Диалоговое окно обычно не имеет меню, панели инструментов (ToolBar) и StatusBar (хотя есть возможность через layout'ы добавить и в диалоговое).

Потом покажу, как создать главное. Добавить Menu, ToolBar и StatusBar. И вызвать диалог из главного окна.

А сейчас создадим диалоговое окно, в котором будет реализован расчёт. Например, сложим два числа.



- выполните предыдущую инструкцию до момента создания пустого main.cpp (назовите проект Calc)

- ПКМ по названию проекта на панели слева

- выбираем Add New...

- на панели слева выбираем С++. А на панели справа выбираем C++ Class. Нажимаем Choose...

- вводим в поле Class Name имя CalcDialog. Вводим в поле Base Class имя QDialog. Нажимаем Next. И нажимаем Finish

- заменяем соответствующие файлы содержимым:

main.cpp
Код:
#include <QApplication>
#include "calcdialog.h"

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    CalcDialog dlg;
    dlg.show();

    return app.exec();
}
calcdialog.h
Код:
#ifndef CALCDIALOG_H
#define CALCDIALOG_H

#include <QDialog>

class QLineEdit;

class CalcDialog : public QDialog
{
    Q_OBJECT
public:
    explicit CalcDialog(QWidget *parent = 0);
    
signals:
    
private slots:
    void calcSLOT();

private:
    QLineEdit *aEdit;
    QLineEdit *bEdit;
    QLineEdit *resultEdit;
    double a;
    double b;
    double result;
};

#endif // CALCDIALOG_H
calcdialog.cpp
Код:
#include "calcdialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>

CalcDialog::CalcDialog(QWidget *parent) :
    QDialog(parent)
{
    QLabel *aLabel = new QLabel(tr("a:"));
    aEdit = new QLineEdit(tr("0"));

    QLabel *bLabel = new QLabel(tr("b:"));
    bEdit = new QLineEdit(tr("0"));

    QLabel *resultLabel = new QLabel(tr("result:"));
    resultEdit = new QLineEdit(tr(""));
    resultEdit->setReadOnly(true);

    QGridLayout *inputLayout = new QGridLayout;
    inputLayout->addWidget(aLabel, 0, 0);
    inputLayout->addWidget(aEdit, 0, 1);
    inputLayout->addWidget(bLabel, 1, 0);
    inputLayout->addWidget(bEdit, 1, 1);
    inputLayout->addWidget(resultLabel, 2, 0);
    inputLayout->addWidget(resultEdit, 2, 1);

    QPushButton *okButton = new QPushButton(tr("Ok"));
    QPushButton *cancelButton = new QPushButton(tr("Cancel"));

    QHBoxLayout *buttonLayout = new QHBoxLayout;
    buttonLayout->addStretch();
    buttonLayout->addWidget(okButton);
    buttonLayout->addWidget(cancelButton);

    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->addLayout(inputLayout);
    mainLayout->addStretch();
    mainLayout->addLayout(buttonLayout);

    connect(okButton, SIGNAL(clicked()), this, SLOT(calcSLOT()));
    connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));

    this->setWindowTitle(tr("Calculation"));
}

void CalcDialog::calcSLOT()
{
    a = aEdit->text().toDouble();
    b = bEdit->text().toDouble();

    result = a + b;

    resultEdit->setText(QString::number(result));
}
8Observer8 вне форума Ответить с цитированием
Старый 14.01.2013, 12:30   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Главное окно (QMainWindow)

Решил своего примера не писать, а продемонстрировать пример из книги Foundations of Qt Development

Все примеры из книги Foundations of Qt Development прикрепил к этому сообщению.

Реализация текстового редактора SDI. SDI - однооконный, как notepad



Изображения для панели инструментов и меню по следующей ссылке: http://www.iconfinder.com/search/?q=cut

Добавление изображений в ресурсы:

- ПКМ по названию проекта на панели слева

- выбираем Add New...

- на панели слева выбираем Qt. А на панели справа выбираем Qt Resource file. Нажимаем Choose...

- вводим имя images. Нажимаем Next. И нажимаем Finish

- на панели слева Projects выбираем: Resoures. Двойной клик по images.qrc

- нажимаем кнопку Add. И выбираем Add Prefix

- в поле Prefix оставляем только косую черту: /

- нажимаем кнопку Add. Выбираем Add Files. И выбираем файл name.png

main.cpp
Код:
#include <QApplication>

#include "sdiwindow.h"

int main( int argc, char **argv )
{
  QApplication app( argc, argv );
  
  (new SdiWindow)->show();
  
  return app.exec();
}
sdiwindow.h
Код:
#ifndef SDIWINDOW_H
#define SDIWINDOW_H

#include <QMainWindow>

class QAction;
class QTextEdit;

class SdiWindow : public QMainWindow
{
    Q_OBJECT

public:
    SdiWindow( QWidget *parent = 0 );

protected:
    void closeEvent( QCloseEvent *event );

private slots:
    void fileNew();
    void helpAbout();

private:
    void createActions();
    void createMenus();
    void createToolbars();

    bool isSafeToClose();

    QTextEdit *docWidget;

    QAction *newAction;
    QAction *closeAction;
    QAction *exitAction;

    QAction *cutAction;
    QAction *copyAction;
    QAction *pasteAction;

    QAction *aboutAction;
    QAction *aboutQtAction;
};

#endif // SDIWINDOW_H
файл sdiwindow.cpp в следующем сообщении

P.S. Все примеры из книги Foundations of Qt Development прикрепил к этому сообщению

Скачать:
http://www.programmersclub.ru/пример...t-development/

Последний раз редактировалось 8Observer8; 14.01.2013 в 12:33.
8Observer8 вне форума Ответить с цитированием
Старый 14.01.2013, 12:31   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

продолжение

sdiwindow.cpp
Код:
#include <QApplication>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QCloseEvent>
#include <QMessageBox>

#include <QTextEdit>

#include "sdiwindow.h"

SdiWindow::SdiWindow( QWidget *parent ) : QMainWindow( parent )
{
    setAttribute( Qt::WA_DeleteOnClose );
    setWindowTitle( tr("%1[*] - %2" ).arg(tr("unnamed")).arg(tr("SDI")) );

    docWidget = new QTextEdit( this );
    setCentralWidget( docWidget );

    connect( docWidget->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool)) );

    createActions();
    createMenus();
    createToolbars();
    statusBar()->showMessage( tr("Done") );
}

void SdiWindow::closeEvent( QCloseEvent *event )
{
    if( isSafeToClose() )
        event->accept();
    else
        event->ignore();
}

bool SdiWindow::isSafeToClose()
{
    if( isWindowModified() )
    {
        switch( QMessageBox::warning( this, tr("SDI"),
                                      tr("The document has unsaved changes.\n"
                                         "Do you want to save it before it is closed?"),
                                      QMessageBox::Discard | QMessageBox::Cancel ) )
        {
        case QMessageBox::Cancel:
            return false;
        default:
            return true;
        }
    }

    return true;
}

void SdiWindow::fileNew()
{
    (new SdiWindow())->show();
}

void SdiWindow::helpAbout()
{
    QMessageBox::about( this, tr("About SDI"), tr("A single document interface application.") );
}

void SdiWindow::createActions()
{
    newAction = new QAction( QIcon(":/images/new.png"), tr("&New"), this );
    newAction->setShortcut( tr("Ctrl+N") );
    newAction->setStatusTip( tr("Create a new document") );
    connect( newAction, SIGNAL(triggered()), this, SLOT(fileNew()) );

    closeAction = new QAction( tr("&Close"), this );
    closeAction->setShortcut( tr("Ctrl+W") );
    closeAction->setStatusTip( tr("Close this document") );
    connect( closeAction, SIGNAL(triggered()), this, SLOT(close()) );

    exitAction = new QAction( tr("E&xit"), this );
    exitAction->setShortcut( tr("Ctrl+Q") );
    exitAction->setStatusTip( tr("Quit the application") );
    connect( exitAction, SIGNAL(triggered()), qApp, SLOT(closeAllWindows()) );


    cutAction = new QAction( QIcon(":/images/cut.png"), tr("Cu&t"), this );
    cutAction->setShortcut( tr("Ctrl+X") );
    cutAction->setStatusTip( tr("Cut") );
    cutAction->setEnabled(false);
    connect( docWidget, SIGNAL(copyAvailable(bool)), cutAction, SLOT(setEnabled(bool)) );
    connect( cutAction, SIGNAL(triggered()), docWidget, SLOT(cut()) );

    copyAction = new QAction( QIcon(":/images/copy.png"), tr("&Copy"), this );
    copyAction->setShortcut( tr("Ctrl+C") );
    copyAction->setStatusTip( tr("Copy") );
    copyAction->setEnabled(false);
    connect( docWidget, SIGNAL(copyAvailable(bool)), copyAction, SLOT(setEnabled(bool)) );
    connect( copyAction, SIGNAL(triggered()), docWidget, SLOT(copy()) );

    pasteAction = new QAction( QIcon(":/images/paste.png"), tr("&Paste"), this );
    pasteAction->setShortcut( tr("Ctrl+V") );
    pasteAction->setStatusTip( tr("Paste") );
    connect( pasteAction, SIGNAL(triggered()), docWidget, SLOT(paste()) );


    aboutAction = new QAction( tr("&About"), this );
    aboutAction->setStatusTip( tr("About this application") );
    connect( aboutAction, SIGNAL(triggered()), this, SLOT(helpAbout()) );

    aboutQtAction = new QAction( tr("About &Qt"), this );
    aboutQtAction->setStatusTip( tr("About the Qt toolkit") );
    connect( aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()) );
}

void SdiWindow::createMenus()
{
    QMenu *menu;

    menu = menuBar()->addMenu( tr("&File") );
    menu->addAction( newAction );
    menu->addAction( closeAction );
    menu->addSeparator();
    menu->addAction( exitAction );

    menu = menuBar()->addMenu( tr("&Edit") );
    menu->addAction( cutAction );
    menu->addAction( copyAction );
    menu->addAction( pasteAction );

    menu = menuBar()->addMenu( tr("&Help") );
    menu->addAction( aboutAction );
    menu->addAction( aboutQtAction );
}

void SdiWindow::createToolbars()
{
    QToolBar *toolbar;

    toolbar = addToolBar( tr("File") );
    toolbar->addAction( newAction );

    toolbar = addToolBar( tr("Edit") );
    toolbar->addAction( cutAction );
    toolbar->addAction( copyAction );
    toolbar->addAction( pasteAction );
}
8Observer8 вне форума Ответить с цитированием
Старый 14.01.2013, 12:48   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Реализация текстового редактора MDI. MDI - многооконный, как notepad++



main.cpp
Код:
#include <QApplication>

#include "mdiwindow.h"

int main( int argc, char **argv )
{
  QApplication app( argc, argv );
  
  MdiWindow win;
  win.show();
  
  return app.exec();
}
mdiwindow.h
Код:
#ifndef MDIWINDOW_H
#define MDIWINDOW_H

#include <QMainWindow>

class QAction;
class QWorkspace;
class QSignalMapper;
class QMenu;

class DocumentWindow;

class MdiWindow : public QMainWindow
{
  Q_OBJECT
  
public:
  MdiWindow( QWidget *parent = 0 );
  
protected:
  void closeEvent( QCloseEvent *event );
  
private slots:
  void fileNew();
  
  void editCut();
  void editCopy();
  void editPaste();
  
  void helpAbout();
  
  void enableActions();
  void updateWindowList();

private:
  void createActions();
  void createMenus();
  void createToolbars();

  DocumentWindow *activeDocument();

  QWorkspace *workspace;
  QSignalMapper *mapper;
  
  QAction *newAction;
  QAction *closeAction;
  QAction *exitAction;
  
  QAction *cutAction;
  QAction *copyAction;
  QAction *pasteAction;
  
  QAction *tileAction;
  QAction *cascadeAction;
  QAction *nextAction;
  QAction *previousAction;
  QAction *separatorAction;
  
  QAction *aboutAction;
  QAction *aboutQtAction;
  
  QMenu *windowMenu;
};
  
#endif // MDIWINDOW_H
mdiwindow.cpp
Код:
#include <QApplication>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QCloseEvent>
#include <QMessageBox>

#include <QWorkspace>
#include <QSignalMapper>

#include "mdiwindow.h"

#include "documentwindow.h"

MdiWindow::MdiWindow( QWidget *parent ) : QMainWindow( parent )
{
  setWindowTitle( tr( "MDI" ) );

  workspace = new QWorkspace;
  setCentralWidget( workspace );
  
  connect( workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(enableActions()));
  mapper = new QSignalMapper( this );
  connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );

  createActions();
  createMenus();
  createToolbars();
  statusBar()->showMessage( tr("Done") );
  
  enableActions();
}
  
void MdiWindow::closeEvent( QCloseEvent *event )
{
  workspace->closeAllWindows();

  if( !activeDocument() )
    event->accept();
  else
    event->ignore();
}
  
void MdiWindow::fileNew()
{
  DocumentWindow *document = new DocumentWindow;
  workspace->addWindow( document );

  connect( document, SIGNAL(copyAvailable(bool)), cutAction, SLOT(setEnabled(bool)) );
  connect( document, SIGNAL(copyAvailable(bool)), copyAction, SLOT(setEnabled(bool)) );
  
  document->show();
}

void MdiWindow::helpAbout()
{
  QMessageBox::about( this, tr("About MDI"), tr("A multiple document interface application.") );
}

DocumentWindow *MdiWindow::activeDocument()
{
  return qobject_cast<DocumentWindow*>(workspace->activeWindow());
}

void MdiWindow::enableActions()
{
  bool hasDocuments = (activeDocument() != 0 );
  
  closeAction->setEnabled( hasDocuments );  
  pasteAction->setEnabled( hasDocuments );  
  tileAction->setEnabled( hasDocuments );
  cascadeAction->setEnabled( hasDocuments );
  nextAction->setEnabled( hasDocuments );
  previousAction->setEnabled( hasDocuments );
  separatorAction->setVisible( hasDocuments );

  bool hasSelection = hasDocuments && activeDocument()->textCursor().hasSelection();

  cutAction->setEnabled( hasSelection );  
  copyAction->setEnabled( hasSelection );  
}

void MdiWindow::createActions()
{
  newAction = new QAction( QIcon(":/images/new.png"), tr("&New"), this );
  newAction->setShortcut( tr("Ctrl+N") );
  newAction->setStatusTip( tr("Create a new document") );
  connect( newAction, SIGNAL(triggered()), this, SLOT(fileNew()) );
  
  closeAction = new QAction( tr("&Close"), this );
  closeAction->setShortcut( tr("Ctrl+W") );
  closeAction->setStatusTip( tr("Close this document") );
  connect( closeAction, SIGNAL(triggered()), workspace, SLOT(closeActiveWindow()) );
продолжение файла mdiwindow.cpp в следующем сообщении
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше использовать? Lindemann66 C/C++ Базы данных 11 01.09.2011 10:21
3d графики: что вообще есть и что лучше использовать Krasi Общие вопросы по Java, Java SE, Kotlin 1 09.05.2011 14:41
MS рекомендует использовать AutoComplete в GUI Glen Свободное общение 0 04.04.2011 22:43
Обработка сигнала - что использовать? gooff Компьютерное железо 3 02.07.2008 12:13
Обработка сигнала - что использовать! gooff Помощь студентам 4 22.06.2008 20:57