hailler的个人主页

http://www.qtcn.org/bbs/u/183962  [收藏] [复制]

hailler

  • 0

    关注

  • 2

    粉丝

  • 26

    访客

  • 等级:新手上路
  • 总积分:25
  • 保密,2011-01-01

最后登录:2019-06-22

更多资料

日志

获取打印机信息,获取支持的纸张信息,返回选择的纸张信息

2017-11-05 16:53

头文件中定义
QList <QPrinterInfo > list;                //打印机的所有信息
  QList <QStringList> pageSizeInfo;  //保存支持的纸张信息
  QStringList printerList;                   // 保存目前的打印机信息
  QList<QPageSize> userPageSizeList;   // 保存打印机支持的纸张的纸张信息。 对于多台打印机的,可以用QList <QList <QPageSize>> userPageSizeList 更好些。
//
实现方式:
list = QPrinterInfo::availablePrinters();
for(const QPrinterInfo& printerInfo : list)
    {
      printerList.append(printerInfo.description());
      QStringList plist;
        for(QPageSize ps : printerInfo.supportedPageSizes())
        {
          
            plist.append( ps.name());
            userPageSizeList.append(ps);
        }
        pageSizeInfo.append(plist);

// 设了两个comboBox .。1 用来显示当前打印机的支持的纸张,2用来显示当前选择的打印机。用信号槽来连接
  connect(ui->comboBox_2,SIGNAL(currentIndexChanged(int )),this, SLOT(printerChanged(int )));
//打印机改变后,支持的纸张也改变。
void MainWindow::printerChanged(int index)
{
    qDebug()<<"printer changed";
    if(pagesizeInfo.isEmpty())
        return;
    ui->comboBox->clear();
    ui->comboBox->addItems(pagesizeInfo.at(index));
    ui->comboBox->setCurrentText(0);
}
// 纸张改变后, QPageSize 也变了。用户可以获取改变后的pagesize
void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    QString indexText = ui->comboBox->itemText(index);
    QPrinter printer;
    foreach(QPageSize page,userPageSizeList){
        if(page.name() == indexText){
            qDebug() << page.name();
            printer.setPageSize(page);
            qDebug()<<printer.logicalDpiX() << printer.logicalDpiY();
            qDebug ()<<printer.pageRect().width()<<printer.pageRect().height();
        }
    }
}

//    QString indexText = ui->comboBox->itemText(index);
//    int combox2Index = ui->comboBox_2->currentIndex();
//    QPrinter printer;
//    if(userPageSizeList.isEmpty())
//        return;
//    if(userPageSizeList.at(combox2Index).isEmpty())
//        return;
//    // for(int i = 0 ; i < userPageSizeList.at(combox2Index).size(); i++){
//    foreach(QPageSize page , userPageSizeList.at(combox2Index))//.at(i);
//    {
//        if(page.name() == indexText){
//            //  //  qDebug() <<"i"<<i;
//            qDebug() << "page name:" <<page.name();
//            printer.setPageSize(page);
//            qDebug()<<"rect:" << printer.pageRect();
            
//        }
        
//    }
本来是想用枚举的办法,根据选择的currentIndextext 来逐个判断,可它支持的有100多种,这不是累死人吗?又找不到遍历枚举的办法,就换了list这个办法。
参考了下面的博文
http://blog.csdn.net/amnes1a/article/details/70597506
分类:默认分类|回复:0|浏览:793|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:04-27 19:38
©2005-2016 QTCN开发网 版权所有 Gzip disabled