\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{blakecromar} \pdfinfo{ /Title (c-qprocess.pdf) /Creator (Cheatography) /Author (blakecromar) /Subject (C++ (QProcess) Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A33B2F} \definecolor{LightBackground}{HTML}{F9F2F2} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{C++ (QProcess) Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{blakecromar} via \textcolor{DarkBackground}{\uline{cheatography.com/218070/cs/48201/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}blakecromar \\ \uline{cheatography.com/blakecromar} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 19th June, 2026.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{QProcess}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{// Making a QProcess object \newline QProcess process; \newline \newline // Common methods of the object and what they do \newline process.setStandardInputFile(QProcess::nullDevice()); // redirect stdin to /dev/null \newline process.setStandardOutputFile(QProcess::nullDevice()); // redirect stdout to /dev/null \newline process.start(executableName, argsList); // launch the process; argsList is a QStringList where \newline // each entry is one discrete argument — QProcess passes \newline // them blindly to the executable, so the order and \newline // content is dictated by the executable, not QProcess \newline process.error(); // returns error code e.g. QProcess::FailedToStart \newline process.kill(); // force kill the child process \newline process.exitStatus(); // NormalExit or CrashExit \newline process.exitCode(); // 0 on success \newline process.readAllStandardError(); // grab error output \newline \newline // Holds the thread until either the process finishes or if it hits the duration provided in Ms as a parameter \newline // Returns true if the process finished before the provided duration ends \newline // Returns false if the process didn't finished before the provided duration \newline // Also returns false if the process was already done before this line \newline process.waitForFinished(timeoutMs);} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{A Qt class that launches and manages external processes from within your application, used wherever you would use fork/exec in plain C++. It handles starting the process, managing its input/output streams, waiting for it to finish, and inspecting the result. It is preferred over raw fork/exec in Qt codebases because it cooperates with Qt's own internal signal handling.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{QProcess::nullDevice()}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{QProcess::nullDevice()} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{A static method on QProcess that returns the path to the null device (/dev/null on Linux), which discards anything written to it and returns nothing when read. It is used to silence stdin and stdout when you only care about stderr. Being a static method it is called on the class itself rather than an instance.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{QProcess::FailedToStart}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{if (process.error() == QProcess::FailedToStart) \{ \newline // executable not found or not runnable \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{An error code on QProcess that indicates the executable could not be launched at all, typically because it was not found on the system's PATH or the user lacks permission to run it. It is checked via process.error() after waitForFinished() returns false to distinguish between a launch failure and a timeout. Being a static value it is referenced on the class itself rather than an instance.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{QProcess::NormalExit}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{if (process.exitStatus() == QProcess::NormalExit) \{ \newline // process exited cleanly, exit code can be trusted \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{A status code on QProcess that indicates the process exited cleanly on its own, as opposed to being killed by a signal or crashing. It is checked via process.exitStatus() after waitForFinished() returns to confirm the process shut down normally before trusting the exit code. Being a static value it is referenced on the class itself rather than an instance.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{QProcess::NotRunning}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{if (process.state() == QProcess::NotRunning) // process has exited} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{A value of the QProcess::ProcessState enum indicating the process is not currently running — either it hasn't started yet or it has already finished. Check it via .state() to detect that a process exited between polling slices.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \end{document}