Asynkrona operationer
By default, PrintOperation::run() returns when a print operation is completed. If you need to run a non-blocking print operation, call PrintOperation::set_allow_async(). Note that set_allow_async() is not supported on all platforms, however the done signal will still be emitted.
run() kan returnera PrintOperation::Result::IN_PROGRESS. För att övervaka status och hantera resultatet eller fel behöver du implementera signalhanterare för signalerna done och status_changed:
Till exempel,
// in class ExampleWindow's method...
auto op = PrintOperation::create();
// ...set up op...
op->signal_done().connect(sigc::bind(sigc::mem_fun(
*this, &ExampleWindow::on_printoperation_done), op));
// run the op
Kontrollera sedan för fel och anslut till signalen status_changed. Till exempel:
void ExampleWindow::on_printoperation_done(Gtk::PrintOperation::Result result,
const Glib::RefPtr<PrintOperation>& op)
{
if (result == Gtk::PrintOperation::Result::ERROR)
//meddela användare
else if (result == Gtk::PrintOperation::Result::APPLY)
//Uppdatera PrintSettings med de som används i denna PrintOperation
if (! op->is_finished())
op->signal_status_changed().connect(sigc::bind(sigc::mem_fun(
*this, &ExampleWindow::on_printoperation_status_changed), op));
}
Kontrollera slutligen status. Till exempel,
void ExampleWindow::on_printoperation_status_changed(const Glib::RefPtr<PrintOperation>& op)
{
if (op->is_finished())
//utskriftsjobbet är klart
else
//få status med get_status() eller get_status_string()
//uppdatera användargränssnitt
}