⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qprintdialog_unix.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                                       QString());                else if (deviceName.length()) // local printer                    perhapsAddPrinter(printers, stanzaName, QString(),                                       QString());            }            line.chop(1);            if (line.length() >= 1 && line.length() <= 20)                stanzaName = line;            up = true;            remoteHost.clear();            deviceName.clear();        } else {            // syntax error?  ignore.        }    } while (!ts.atEnd());}#ifndef QT_NO_CUPS#include <cups/cups.h>static char *parseCupsOutput(QList<QPrinterDescription> *printers){    char *defaultPrinter = 0;#ifdef QT_NO_LIBRARY    Q_UNUSED(printers);#else    int nd;    cups_dest_t *d;    QLibrary lib("cups", 2);    typedef int (*CupsGetDests)(cups_dest_t **dests);    typedef void (*CupsFreeDests)(int, cups_dest_t *);    CupsGetDests _cupsGetDests = (CupsGetDests)lib.resolve("cupsGetDests");    CupsFreeDests _cupsFreeDests = (CupsFreeDests)lib.resolve("cupsFreeDests");    if (_cupsGetDests) {        nd = _cupsGetDests(&d);        if (nd < 1)            return 0;        int n = 0;        while (n < nd) {            perhapsAddPrinter(printers, d[n].name,                               QPrintDialog::tr("Unknown Location"), QString());            if (d[n].is_default && !defaultPrinter)                defaultPrinter = qstrdup(d[n].instance);            n++;        }        if (_cupsFreeDests)            _cupsFreeDests(nd, d);    }#endif    return defaultPrinter;}#endifQPrintDialog::QPrintDialog(QPrinter *printer, QWidget *parent)    : QAbstractPrintDialog(*(new QPrintDialogPrivate), printer, parent){    d_func()->init();}/*! Destroys the object and frees any allocated resources.  Does not  delete the associated QPrinter object.*/QPrintDialog::~QPrintDialog(){}QGroupBox *QPrintDialogPrivate::setupPrinterSettings(){    Q_Q(QPrintDialog);    QGroupBox *g = new QGroupBox(QPrintDialog::tr("Printer settings"), q);    QBoxLayout *tll = new QBoxLayout(QBoxLayout::Down, g);    colorMode = new QButtonGroup(q);    QObject::connect(colorMode, SIGNAL(buttonClicked(QAbstractButton*)),                     q, SLOT(_q_colorModeSelected(QAbstractButton*)));    printColor = new QRadioButton(QPrintDialog::tr("Print in color if available"), g);    colorMode->addButton(printColor);    printColor->setChecked(true);    tll->addWidget(printColor);    printGray = new QRadioButton(QPrintDialog::tr("Print in grayscale"), g);    colorMode->addButton(printGray);    tll->addWidget(printGray);    return g;}QGroupBox *QPrintDialogPrivate::setupDestination(){    Q_Q(QPrintDialog);    QGroupBox *g = new QGroupBox(QPrintDialog::tr("Print destination"), q);    QBoxLayout *tll = new QBoxLayout(QBoxLayout::Down, g);    printerOrFile = new QButtonGroup(q);    // printer radio button, list    printToPrinterButton = new QRadioButton(QPrintDialog::tr("Print to printer:"), g);    tll->addWidget(printToPrinterButton);    printerOrFile->addButton(printToPrinterButton);    printToPrinterButton->setChecked(true);    outputToFile = false;    QBoxLayout *horiz = new QBoxLayout(QBoxLayout::LeftToRight);    tll->addLayout(horiz, 3);    horiz->addSpacing(19);    char *etcLpDefault = 0;#ifndef QT_NO_CUPS    etcLpDefault = parseCupsOutput(&printers);#endif    if (printers.size() == 0) {        // we only use other schemes when cups fails.        parsePrintcap(&printers, QLatin1String("/etc/printcap"));        parseEtcLpMember(&printers);        parseSpoolInterface(&printers);        parseQconfig(&printers);        QFileInfo f;        f.setFile(QLatin1String("/etc/lp/printers"));        if (f.isDir()) {            parseEtcLpPrinters(&printers);            QFile def(QLatin1String("/etc/lp/default"));            if (def.open(QIODevice::ReadOnly)) {                if (etcLpDefault)                    delete[] etcLpDefault;                etcLpDefault = new char[1025];                if (def.readLine(etcLpDefault, 1024) > 0) {                    char *p = etcLpDefault;                    while (p && *p) {                        if (!isprint((uchar) *p) || isspace((uchar) *p))                            *p = 0;                        else                            ++p;		    }                }            }        }        char *def = 0;        f.setFile(QLatin1String("/etc/nsswitch.conf"));        if (f.isFile()) {            def = parseNsswitchConf(&printers);        } else {            f.setFile(QLatin1String("/etc/printers.conf"));            if (f.isFile())                def = parsePrintersConf(&printers);        }        if (def) {            if (etcLpDefault)                delete[] etcLpDefault;            etcLpDefault = def;        }    }    // all printers hopefully known.  try to find a good default    QString dollarPrinter;    {        if (!qgetenv("PRINTER").isEmpty())            dollarPrinter = QString::fromLocal8Bit(qgetenv("LPDEST").constData());        if (!dollarPrinter.isEmpty())            perhapsAddPrinter(&printers, dollarPrinter,                               QPrintDialog::tr("unknown"),                              QLatin1String(""));    }    model = new QPrinterModel(printers, q);    view = new QTreeView(g);    view->setMinimumHeight(100);    view->setModel(model);    view->setRootIsDecorated(false);    view->header()->setResizeMode(2, QHeaderView::Stretch);    // bang the best default into the listview    int quality = 0;    int best = 0;    for (int i = 0; i < printers.size(); ++i) {        QRegExp ps(QLatin1String("[^a-z]ps(?:[^a-z]|$)"));        QRegExp lp(QLatin1String("[^a-z]lp(?:[^a-z]|$)"));        QString name = printers.at(i).name;        QString comment = printers.at(i).comment;        if (quality < 4 && name == dollarPrinter) {            best = i;            quality = 4;        } else if (quality < 3 && etcLpDefault &&                    name == QLatin1String(etcLpDefault)) {            best = i;            quality = 3;        } else if (quality < 2 &&                    (name == QLatin1String("ps") ||                     ps.indexIn(comment) != -1)) {            best = i;            quality = 2;        } else if (quality < 1 &&                    (name == QLatin1String("lp") ||                     lp.indexIn(comment) > -1)) {            best = i;            quality = 1;        }    }    view->setCurrentIndex(static_cast<QAbstractTableModel*>(model)->index(best, 0));    if (etcLpDefault)                 // Avoid purify complaint        delete[] etcLpDefault;//     int h = fontMetrics().height();//     if (printers.size())//         h = view->itemViewportRect(model->index(0, 0)).height();//     view->setMinimumSize(view->sizeHint().width(),//                                  printers->header()->height() +//                                  3 * h);    horiz->addWidget(view, 3);    // file radio button, edit/browse    printToFileButton = new QRadioButton(QPrintDialog::tr("Print to file:"), g);    tll->addWidget(printToFileButton);    printerOrFile->addButton(printToFileButton);    horiz = new QBoxLayout(QBoxLayout::LeftToRight);    tll->addLayout(horiz);    horiz->addSpacing(19);    fileName = new QLineEdit(g);    QObject::connect(fileName, SIGNAL(textChanged(QString)),                     q, SLOT(_q_fileNameEditChanged(QString)));    horiz->addWidget(fileName, 1);    browse = new QPushButton(QPrintDialog::tr("Browse..."), g);    browse->setAutoDefault(false);    QObject::connect(browse, SIGNAL(clicked()),                     q, SLOT(_q_browseClicked()));    horiz->addWidget(browse);    fileName->setEnabled(false);    browse->setEnabled(false);    QObject::connect(printerOrFile, SIGNAL(buttonClicked(QAbstractButton*)),             q, SLOT(_q_printerOrFileSelected(QAbstractButton*)));    return g;}QGroupBox *QPrintDialogPrivate::setupOptions(){    Q_Q(QPrintDialog);    QGroupBox *g = new QGroupBox(QPrintDialog::tr("Options"), q);    QBoxLayout *lay = new QBoxLayout(QBoxLayout::LeftToRight, g);    QBoxLayout *tll = new QBoxLayout(QBoxLayout::Down);    lay->addLayout(tll);    printRange = new QButtonGroup(q);    QObject::connect(printRange, SIGNAL(buttonClicked(QAbstractButton*)), q, SLOT(_q_printRangeSelected(QAbstractButton*)));    pageOrder = new QButtonGroup(q);    QObject::connect(pageOrder, SIGNAL(buttonClicked(QAbstractButton*)), q, SLOT(_q_pageOrderSelected(QAbstractButton*)));    printAllButton = new QRadioButton(QPrintDialog::tr("Print all"), g);    printRange->addButton(printAllButton);    tll->addWidget(printAllButton);    printSelectionButton = new QRadioButton(QPrintDialog::tr("Print selection"), g);    printRange->addButton(printSelectionButton);    tll->addWidget(printSelectionButton);    printRangeButton = new QRadioButton(QPrintDialog::tr("Print range"), g);    printRange->addButton(printRangeButton);    tll->addWidget(printRangeButton);    QBoxLayout *horiz = new QBoxLayout(QBoxLayout::LeftToRight);    tll->addLayout(horiz);    firstPageLabel = new QLabel(QPrintDialog::tr("From page:"), g);    horiz->addSpacing(19);    horiz->addWidget(firstPageLabel);    firstPage = new QSpinBox(g);    firstPage->setRange(1, 9999);    firstPage->setValue(1);    horiz->addWidget(firstPage, 1);    QObject::connect(firstPage, SIGNAL(valueChanged(int)),             q, SLOT(_q_setFirstPage(int)));    horiz = new QBoxLayout(QBoxLayout::LeftToRight);    tll->addLayout(horiz);    lastPageLabel = new QLabel(QPrintDialog::tr("To page:"), g);    horiz->addSpacing(19);    horiz->addWidget(lastPageLabel);    lastPage = new QSpinBox(g);    lastPage->setRange(1, 9999);    lastPage->setValue(9999);    horiz->addWidget(lastPage, 1);    QObject::connect(lastPage, SIGNAL(valueChanged(int)),             q, SLOT(_q_setLastPage(int)));    lay->addSpacing(25);    tll = new QBoxLayout(QBoxLayout::Down);    lay->addLayout(tll);    // print order    firstPageFirst = new QRadioButton(QPrintDialog::tr("Print first page first"), g);    tll->addWidget(firstPageFirst);    pageOrder->addButton(firstPageFirst);    firstPageFirst->setChecked(true);    lastPageFirst = new QRadioButton(QPrintDialog::tr("Print last page first"), g);    tll->addWidget(lastPageFirst);    pageOrder->addButton(lastPageFirst);    tll->addStretch();    // copies    horiz = new QBoxLayout(QBoxLayout::LeftToRight);    tll->addLayout(horiz);    QLabel *l = new QLabel(QPrintDialog::tr("Number of copies:"), g);    horiz->addWidget(l);    copies = new QSpinBox(g);    copies->setRange(1,99);    copies->setValue(1);    horiz->addWidget(copies, 1);    QObject::connect(copies, SIGNAL(valueChanged(int)),             q, SLOT(_q_setNumCopies(int)));    QSize s = firstPageLabel->sizeHint()              .expandedTo(lastPageLabel->sizeHint())              .expandedTo(l->sizeHint());    firstPageLabel->setMinimumSize(s);    lastPageLabel->setMinimumSize(s);    l->setMinimumSize(s.width() + 19, s.height());    return g;}void isc(QPrintDialogPrivate *ptr, const QString & text, QPrinter::PageSize ps){    if (ptr && !text.isEmpty() && ps < QPrinter::NPageSize) {        ptr->sizeCombo->addItem(text);        int index = ptr->sizeCombo->count()-1;        if (index >= 0 && index < QPrinter::NPageSize)            ptr->indexToPageSize[index] = ps;    }}QGroupBox *QPrintDialogPrivate::setupPaper(){    Q_Q(QPrintDialog);    QGroupBox *g = new QGroupBox(QPrintDialog::tr("Paper format"), q);    QBoxLayout *tll = new QBoxLayout(QBoxLayout::Down, g);    pageSize = QPrinter::A4;    // page orientation    orientationCombo = new QComboBox(g);    orientationCombo->addItem(QPrintDialog::tr("Portrait"));    orientationCombo->addItem(QPrintDialog::tr("Landscape"));    tll->addWidget(orientationCombo);    orientation = QPrinter::Portrait;    QObject::connect(orientationCombo, SIGNAL(activated(int)),             q, SLOT(_q_orientSelected(int)));    // paper size    sizeCombo = new QComboBox(g);    tll->addWidget(sizeCombo);    int n;    for(n=0; n<QPrinter::NPageSize; n++)        indexToPageSize[n] = QPrinter::A4;    isc(this, QPrintDialog::tr("A0 (841 x 1189 mm)"), QPrinter::A0);    isc(this, QPrintDialog::tr("A1 (594 x 841 mm)"), QPrinter::A1);    isc(this, QPrintDialog::tr("A2 (420 x 594 mm)"), QPrinter::A2);    isc(this, QPrintDialog::tr("A3 (297 x 420 mm)"), QPrinter::A3);    isc(this, QPrintDialog::tr("A4 (210 x 297 mm, 8.26 x 11.7 inches)"), QPrinter::A4);    isc(this, QPrintDialog::tr("A5 (148 x 210 mm)"), QPrinter::A5);    isc(this, QPrintDialog::tr("A6 (105 x 148 mm)"), QPrinter::A6);    isc(this, QPrintDialog::tr("A7 (74 x 105 mm)"), QPrinter::A7);    isc(this, QPrintDialog::tr("A8 (52 x 74 mm)"), QPrinter::A8);    isc(this, QPrintDialog::tr("A9 (37 x 52 mm)"), QPrinter::A9);    isc(this, QPrintDialog::tr("B0 (1000 x 1414 mm)"), QPrinter::B0);    isc(this, QPrintDialog::tr("B1 (707 x 1000 mm)"), QPrinter::B1);    isc(this, QPrintDialog::tr("B2 (500 x 707 mm)"), QPrinter::B2);    isc(this, QPrintDialog::tr("B3 (353 x 500 mm)"), QPrinter::B3);    isc(this, QPrintDialog::tr("B4 (250 x 353 mm)"), QPrinter::B4);    isc(this, QPrintDialog::tr("B5 (176 x 250 mm, 6.93 x 9.84 inches)"), QPrinter::B5);    isc(this, QPrintDialog::tr("B6 (125 x 176 mm)"), QPrinter::B6);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -