Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог драйвера принтера, используя класс QQueue 
:(
    Опции темы
andrew1ee
Дата 14.5.2014, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.5.2014

Репутация: нет
Всего: нет



Понимаю что вызову бурю негодования. Но прошу помощи. Все сроки закончились а программа не готова. Зашел в тупик.

Код

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    driver = new PrinterDriver();
    ui->listView->setModel(new PrinterDriverListModel(driver));

    selectionModel = ui->listView->selectionModel();
    connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
            this, SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)));

//    connect(driver, SIGNAL(pagePrinted(QPrintFile)), this, SLOT());
}

MainWindow::~MainWindow()
{
    delete ui;
    delete driver;
}

void MainWindow::selectionChangedSlot(const QItemSelection &/*newSelection*/,
                                  const QItemSelection &/*oldSelection*/)
{
    selectedIndex = selectionModel->currentIndex();
}

void MainWindow::on_addFiles_clicked()
{
    file = QFileDialog::getOpenFileName(this, tr("Открыть файл для печати"), "D://",  tr("Office (*.doc *.docx)"));
    QPrintFile printFile;
    printFile.fileName = file;
    int count = file.count();
    printFile.totalPages = count;
    printFile.printedPages = 0;
    driver->addFile(printFile);

    currentIndex = PrinterDriverListModel(driver).index(0,0);
    selectionModel->setCurrentIndex(currentIndex,QItemSelectionModel::ClearAndSelect);
}

void PrinterDriver::addFile(QPrintFile &printFile)
{
    queue.enqueue(printFile);
    emit filePrintStarted(printFile);
}

void PrinterDriverListModel::PrinterDriverListModel(PrinterDriver *d)
{
    driver = d;
    connect(driver,SIGNAL(filePrintStarted(QPrintFile), this, SLOT(onFilePrintStarted(QPrintFile)));
}

void MainWindow::on_print_clicked()
{
    printFile.printedPages =+ 1;
    emit pagePrinted(printFile);
    if (printFile.printedPages == printFile.totalPages)
    {
        driver->onFilePrinted();
    }

    selectedIndex = selectionModel->currentIndex();
}

void PrinterDriverListModel::PrinterDriverListModel(PrinterDriver *d)
{
    driver = d;
    connect(driver,SIGNAL(filePrinted(QPrintFile)), this, SLOT(onFilePrinted(QPrintFile)));
}

void PrinterDriver::onFilePrinted(QPrintFile &printFile)
{
    emit filePrinted(printFile);
    queue.dequeue(printFile);
}

void PrinterDriverListModel::onFilePrintStarted(QPrintFile &printFile)
{
    int count = MainWindow::file.count();
    beginInsertRows(QModelIndex(), count, count);
    MainWindow::file.push_back(printFile);
    endInsertRows();
}

void MainWindow::on_cancel_clicked()
{
    if (selectionModel->setCurrentIndex(currentIndex,QItemSelectionModel::ClearAndSelect))
    {
        driver->cancelPrint();
    }
}

void PrinterDriver::cancelPrint(QPrintFile &printFile)
{
    emit printCanceled(printFile, number); // number - номер в очереди
    queue.removeAt();
}

void PrinterDriverListModel::PrinterDriverListModel(PrinterDriver *d)
{
    driver = d;
    connect(driver,SIGNAL(printCanceled(QPrintFile)), this, SLOT(onPrintCanceled(QPrintFile)));
}

void PrinterDriverListModel::onPrintCanceled(QPrintFile &printFile)
{
    beginRemoveRows(QModelIndex(), count, count);
    MainWindow::file.remove();
    endRemoveRows();
}


PM MAIL   Вверх
math64
Дата 15.5.2014, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



У тебя проблемы с C++. Прежде чем писать для Qt следовало бы выучить C++.
Конструктор не возвращет никакого значения, даже void.
У класса не может быть нескольких конструкторов с одной и той же сигнатурой - их нужно объединить в один.
У класса, производного от абстрактного (QAbstractListModel) нужно реализоваывать все абстрактные методы - компилятор выдаст соответсвующие сообщения об ошибке.
Примеры реализации класса, производного от QAbstractListModel и др. есть вместе с Qt - ищи QAbstractListModel в файлах .cpp и .h в каталогах examples и demo

Добавлено через 2 минуты и 43 секунды
Если нужен доступ к объекту, созданному в конструкторе, запомни его в поле класса, а не создавай каждый раз новый экземпляр:
Код

model =new PrinterDriverListModel(driver)
ui->listView->setModel(model);


Добавлено через 5 минут и 34 секунды
Из PrintDriverListModel нет доступа к полям MainWindоw - список file должен быть полем в PrintDriverListModel
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.