印刷用に非常にカスタムのウィジェットを作成する必要があります。マルチプラットフォームでなければなりません。一貫性を保つために、ウィジェットはlinuxやmacのようにウィンドウ内で似ているはずです... Windowsの印刷ダイアログを使用するQtコードを勉強した後、私はQtの印刷ダイアログをサブクラス化することを断念し、独自のウィジェットを作成しました。Windowsでシステムプリンタ名のリストを取得するのが非常に遅い
今、私はステップ1に入っています:システム上のプリンタのリストを入力してください。私は、プログラムの実行中にシステム上のプリンタが変更されても機能するように、それぞれの "show()"で呼び出される次のコードを追加しました。それは動作しますが、極端に遅いです:
私は、プリンタに追加し、デフォルトのプリンタをインデックス-1として追加してウィジェットに通知します。
QMap<int, QString> PrintController::getListOfSystemPrinters()
{
QMap<int, QString> printerNames;
#ifdef Q_OS_WIN32
#ifdef NOT_QT_4 // I tried to use "availablePrinterNames" thinking it will be faster but it actually seems slower
QPrinter currentPrinter;
QString printerName = currentPrinter.printerName();
QStringList printerNameList = QPrinterInfo::availablePrinterNames();
int index = 0;
foreach(QString printerName1, printerNameList)
{
printerNames.insert(index, printerName1);
if(printerName == printerName1)
printerNames.insert(-1, printerName1);
++index;
}
#else
QPrinter currentPrinter;
QString printerName = currentPrinter.printerName();
QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters();
int index = 0;
foreach(QPrinterInfo printerInfo, printers)
{
QString printerName1 = printerInfo.printerName();
printerNames.insert(index, printerName1);
if(printerName == printerName1)
printerNames.insert(-1, printerName1);
++index;
}
#endif
#elif defined Q_OS_UNIX
#endif
return printerNames;
}
これは私が持っているコードの中で最も遅いものです!私はすべてのプリンタ名を取得する別の方法を参照してください...しかし、私は何か間違っている必要があります!
Qt 5バージョンはQt 4バージョンよりやや遅いです...いずれにしても、どちらも遅いです...
QPrinterInfo
を作成する呼び出しが遅いです。
他の選択肢はありますか?
Windowsでプリンタ名のリストを取得するにはどうすればよいですか?
注これは4.7-5.x
ここで 'availablePrinterNames()'(Windowsの場合はQt 5.6.1)には '9-13msecs'が終わります。 'availablePrinters()'は '' 110-150 msecs程度です。それは長い時間ではなく、私は本当にあなたの現在の設定、おそらくあなたのプリンタのドライバと関係していると思うでしょう – Mike
@マイク - 私は、遅さがネットワークプリンタを持つことと関係があるかもしれないことをオンラインで読んで...可能です私は実際のプリンタに実際に解決しないネットワークプリンタをインストールしたこともあります...ただ、それを見るのは時間がかかりませんでした。それにはavailablePrinterNamesを使用すると少し時間がかかります。しかし、プリンタ自体のためにする必要があります... idk – Thalia