}DownloadManager::cleanup()
{
if (m_downloads.isEmpty())
return;
m_model->removeRows(0, m_downloads.count());
updateItemCount();
if (m_downloads.isEmpty() && m_iconProvider) {
delete m_iconProvider;
m_iconProvider = 0;
}
m_autoSaver->changeOccurred();
}DownloadManager::updateItemCount()
{
int count = m_downloads.count();
itemCount->setText(count == 1 ? tr("1 Download") : tr("%1 Downloads").arg(count));
}::DownloadModel(DownloadManager *downloadManager, QObject *parent)
: QAbstractListModel(parent)
, m_downloadManager(downloadManager)
{}DownloadModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= rowCount(index.parent()))
return QVariant();
if (role == Qt::ToolTipRole)
if (!m_downloadManager->m_downloads.at(index.row())->downloadedSuccessfully())
return m_downloadManager->m_downloads.at(index.row())->downloadInfoLabel->text();
return QVariant();
}DownloadModel::rowCount(const QModelIndex &parent) const
{ return (parent.isValid()) ? 0 : m_downloadManager->m_downloads.count();}DownloadModel::removeRows(int row, int count, const QModelIndex &parent)
{
if (parent.isValid())
return false;
int lastRow = row + count - 1;
for (int i = lastRow; i >= row; --i) {
if (m_downloadManager->m_downloads.at(i)->downloadedSuccessfully()) {
beginRemoveRows(parent, i, i);
m_downloadManager->m_downloads.takeAt(i)->deleteLater();
endRemoveRows();
}
}
m_downloadManager->m_autoSaver->changeOccurred();
return true;
}
Исходный код диалогового окона печати в pdf
#include "headers/printtopdfdialog.h"
#include "ui_printtopdfdialog.h"
#include <QtCore/QDir>
#ifndef QT_NO_PRINTER
#include <QtPrintSupport/QPageSetupDialog>
#include <QtPrintSupport/QPrinter>
#endif // QT_NO_PRINTER
#include <QtWidgets/QFileDialog>::PrintToPdfDialog(const QString &filePath, QWidget *parent) :
QDialog(parent),
currentPageLayout(QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(0.0, 0.0, 0.0, 0.0))),
ui(new Ui::PrintToPdfDialog)
{
ui->setupUi(this);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
connect(ui->chooseFilePathButton, &QToolButton::clicked, this, &PrintToPdfDialog::onChooseFilePathButtonClicked);
#ifndef QT_NO_PRINTER
connect(ui->choosePageLayoutButton, &QToolButton::clicked, this, &PrintToPdfDialog::onChoosePageLayoutButtonClicked);
#else
ui->choosePageLayoutButton->hide();
#endif // QT_NO_PRINTER
updatePageLayoutLabel();
setFilePath(filePath);
}::~PrintToPdfDialog()
{
delete ui;
}PrintToPdfDialog::onChoosePageLayoutButtonClicked()
{
#ifndef QT_NO_PRINTER
QPrinter printer;
printer.setPageLayout(currentPageLayout);
QPageSetupDialog dlg(&printer, this);
if (dlg.exec() != QDialog::Accepted)
return;
currentPageLayout.setPageSize(printer.pageLayout().pageSize());
currentPageLayout.setOrientation(printer.pageLayout().orientation());
updatePageLayoutLabel();
#endif // QT_NO_PRINTER
}PrintToPdfDialog::onChooseFilePathButtonClicked()
{
QFileInfo fi(filePath());
QFileDialog dlg(this, tr("Save PDF as"), fi.absolutePath());
dlg.setAcceptMode(QFileDialog::AcceptSave);
dlg.setDefaultSuffix(QStringLiteral(".pdf"));
dlg.selectFile(fi.absoluteFilePath());
if (dlg.exec() != QDialog::Accepted)
return;
setFilePath(dlg.selectedFiles().first());
}PrintToPdfDialog::filePath() const
{
return QDir::fromNativeSeparators(ui->filePathLineEdit->text());
}PrintToPdfDialog::setFilePath(const QString &filePath)
{
ui->filePathLineEdit->setText(QDir::toNativeSeparators(filePath));
}PrintToPdfDialog::pageLayout() const
{
return currentPageLayout;
}PrintToPdfDialog::updatePageLayoutLabel()
{
ui->pageLayoutLabel->setText(QString("%1, %2").arg(
currentPageLayout.pageSize().name()).arg(
currentPageLayout.orientation() == QPageLayout::Portrait
? tr("Portrait") : tr("Landscape")
));
}
Скрипт Inno Setup
#define Name "InterinClient"
#define Version "2.0.5"
#define Publisher "ООО Интерин технологии"
#define URL "http://www.interin.ru"
#define ExeName "InterinClient.exe"
[Setup]={{89ED2222-8C22-4F0B-A1CC-84770F5498F3}}={#Name}={#Version}={#Publisher}={#URL}={#URL}={#URL}={#Name} версия {#Version}=c:\Interin\InterinAlpha=Interin={app}\{#ExeName}=D:\repos\Development\Builds\Windows\x32\InterinClient\install={#Name}_{#Version}_setup=lzma=yes
;DiskSpanning=yes
;SlicesPerDisk=3
;DiskSliceSize=10000000
;ArchitecturesAllowed=x64
;ArchitecturesInstallIn64BitMode=x64
[Languages]: "english"; MessagesFile: "compiler:Default.isl"; LicenseFile: "License_ENG.txt": "russian"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "License_RUS.txt"
[Tasks]: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; Flags: unchecked
[Files]: "D:\repos\Development\Builds\Windows\x32\InterinClient\release\{#ExeName}"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "D:\repos\Development\Projects\InterinClient\setup\qt.conf"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "D:\repos\Development\Projects\InterinClient\docs\changelog.txt"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "D:\repos\Development\Builds\Windows\x32\InterinClntMainWnd\release\InterinClntMainWnd.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs : "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\libEGL.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\libGLESv2.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\msvcp120.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\msvcr120.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\opengl32sw.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Core.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Gui.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Network.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Qml.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Quick.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5WebChannel.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5WebEngineCore.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5WebEngineWidgets.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Widgets.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5Xml.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\QtWebEngineProcess.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\bin\Qt5PrintSupport.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\plugins\platforms\qminimal.dll"; DestDir: "{app}\plugins\platforms"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\plugins\platforms\qoffscreen.dll"; DestDir: "{app}\plugins\platforms"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\plugins\platforms\qwindows.dll"; DestDir: "{app}\plugins\platforms"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\resources\*"; DestDir: "{app}\resources"; Flags: ignoreversion recursesubdirs createallsubdirs: "C:\Qt\Qt5.7.0\5.7\msvc2013\translations\qtwebengine_locales\*"; DestDir: "{app}\translations\qtwebengine_locales"; Flags: ignoreversion recursesubdirs createallsubdirs
;Source: "E:\install\dotNetFx40_Full_x86_x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall; Check: not IsRequiredDotNetDetected
[Registry]: HKCU; Subkey: Software\Interin; Flags: createvalueifdoesntexist uninsdeletekey;: HKCU; Subkey: Software\Interin\InterinClient; Flags: createvalueifdoesntexist;: HKCU; Subkey: Software\Interin\InterinClient\ModulesManager; Flags: createvalueifdoesntexist;: HKCU; Subkey: Software\Interin\InterinClient\ModulesManager; ValueType: string; ValueName: main_module; ValueData: MainWindow; Flags: createvalueifdoesntexist;: HKCU; Subkey: Software\Interin\InterinClient\ModulesManager\MainWindow; Flags: createvalueifdoesntexist;: HKCU; Subkey: Software\Interin\InterinClient\ModulesManager\MainWindow; ValueType: string; ValueName:module_file; ValueData: InterinClntMainWnd.dll; Flags: createvalueifdoesntexist;: HKCU; Subkey: Software\Interin\InterinClient\ModulesManager\MainWindow; ValueType: string; ValueName: module_path; ValueData: c:/Interin/InterinAlpha/; Flags: createvalueifdoesntexist;
[Icons]: "{group}\Interin"; Filename: "{app}\{#ExeName}": "{group}\{cm:UninstallProgram, {#Name}}"; Filename: "{uninstallexe}": "{userdesktop}\Интерин Alpha"; Filename: "{app}\{#ExeName}"; Tasks: desktopicon
;[Messages]
;#include "messages_rus.txt"
;[Code]
;#include "InterinClient.pas"
[Run]
;Filename: regedit.exe; Parameters: "/s {tmp}\registry.reg";
;Filename: {tmp}\dotNetFx40_Full_x86_x64.exe; Parameters: "/q:a /c:""install /l /q"""; Check: not IsRequiredDotNetDetected; StatusMsg: Microsoft Framework 4.0 is installed. Please wait...
[UninstallRun]: regedit.exe; Parameters: "/s -HKEY_CURRENT_USER\Software\Interin";