我怎么知道选择了哪台打印机
How can I know which printer is selected
我有一个带有典型打印机对话框的程序(使用 Qt5.1 中的 QPrintDialog 制作),您可以在其中 select 从列表中选择您想要的打印机。假设您有 printerA(默认情况下 selected)、printerB、printerC 和 printerD。我有一个 printerD 的问题,所以当用户 select 我想做一些事情(可能显示弹出消息或者可能关闭一些按钮)。
我一直在寻找如何知道 printerD 是否 selected 但找不到。我在这里 QPrinter, QPrinterInfo, QPrintDialog and QDialog and I couldn't find it. Also I've found this 搜索,虽然它可以帮助我,但答案只告诉你如何设置默认值。
如果你不知道我说的是哪个对话框,here也是一样。
我也在想这个列表是否可能是一个 QListWidget Class 但如果是的话,我不知道如何得到它。
所以我的问题是:在 PrinterDialog 生命周期的任何时刻,我如何才能知道哪个打印机 selected? (出现时)。
此外,我想补充一点,我试图关闭打印机的按钮,这让我在下一个代码中出错,但是 QList 是空的,所以我无法到达打印或首选项按钮来关闭它我不知道为什么:
QList<QPrinterInfo> info_list = QPrinterInfo::availablePrinters();
foreach(QPrinterInfo info, info_list)
{
if (info.state() == 3) // the printer gives error
{
QList<QPushButton *> allButtons = printDialog.findChildren<QPushButton *>();
for (int i = 0; i < allButtons.size(); i++)
{
if (allButtons.at(i)->text().contains("Print") || allButtons.at(i)->text().contains("Preferences"))
{
allButtons.at(i)->setDisabled(true);
}
}
}
}
提前致谢。
您可能正在查找打印机名称:QPrinter::printerName
。
QPrinter printer;
QPrintDialog printDialog(printer);
if (printDialog.exec() == QDialog::Accepted) {
// executed after the print dialog is closed and accepted.
if (printer.printerName() == "printerD") {
// show a message or do something special ...
}
// print ...
}
请注意,当打印机对话框仍处于打开状态(尚未接受)时,QPrintDialog
不提供任何检查所选打印机的方法。使用 findChildren
等未记录的 hack 将无法以跨平台方式工作,因为可能会使用本机打印对话框[1]:
On Windows and macOS, the native print dialog is used, which means
that some QWidget and QDialog properties set on the dialog won't be
respected. The native print dialog on macOS does not support setting
printer options, i.e. setOptions() and setOption() have no effect.
如果您真的want/need实时确定打印机选择,您应该实现自己的自定义打印机对话框。
我有一个带有典型打印机对话框的程序(使用 Qt5.1 中的 QPrintDialog 制作),您可以在其中 select 从列表中选择您想要的打印机。假设您有 printerA(默认情况下 selected)、printerB、printerC 和 printerD。我有一个 printerD 的问题,所以当用户 select 我想做一些事情(可能显示弹出消息或者可能关闭一些按钮)。
我一直在寻找如何知道 printerD 是否 selected 但找不到。我在这里 QPrinter, QPrinterInfo, QPrintDialog and QDialog and I couldn't find it. Also I've found this 搜索,虽然它可以帮助我,但答案只告诉你如何设置默认值。
如果你不知道我说的是哪个对话框,here也是一样。
我也在想这个列表是否可能是一个 QListWidget Class 但如果是的话,我不知道如何得到它。
所以我的问题是:在 PrinterDialog 生命周期的任何时刻,我如何才能知道哪个打印机 selected? (出现时)。
此外,我想补充一点,我试图关闭打印机的按钮,这让我在下一个代码中出错,但是 QList 是空的,所以我无法到达打印或首选项按钮来关闭它我不知道为什么:
QList<QPrinterInfo> info_list = QPrinterInfo::availablePrinters();
foreach(QPrinterInfo info, info_list)
{
if (info.state() == 3) // the printer gives error
{
QList<QPushButton *> allButtons = printDialog.findChildren<QPushButton *>();
for (int i = 0; i < allButtons.size(); i++)
{
if (allButtons.at(i)->text().contains("Print") || allButtons.at(i)->text().contains("Preferences"))
{
allButtons.at(i)->setDisabled(true);
}
}
}
}
提前致谢。
您可能正在查找打印机名称:QPrinter::printerName
。
QPrinter printer;
QPrintDialog printDialog(printer);
if (printDialog.exec() == QDialog::Accepted) {
// executed after the print dialog is closed and accepted.
if (printer.printerName() == "printerD") {
// show a message or do something special ...
}
// print ...
}
请注意,当打印机对话框仍处于打开状态(尚未接受)时,QPrintDialog
不提供任何检查所选打印机的方法。使用 findChildren
等未记录的 hack 将无法以跨平台方式工作,因为可能会使用本机打印对话框[1]:
On Windows and macOS, the native print dialog is used, which means that some QWidget and QDialog properties set on the dialog won't be respected. The native print dialog on macOS does not support setting printer options, i.e. setOptions() and setOption() have no effect.
如果您真的want/need实时确定打印机选择,您应该实现自己的自定义打印机对话框。