This technically answers your question, but the result may not be what you expected. Option 1 (commented & result) draws a tikzpicture for each pixel, so it's slow but very flexible. Option 2 (uncommented & not shown) scales any character to the pixel size, so it's fast but less flexible.
MWE
\documentclass{article}
\usepackage{qrcode,tikz,graphicx}
\makeatletter
\let\xqrcode@int\qrcode@int% store package macro
\def\qrcode@int{\let\xrule\rule% store old rule
\let\rule\altrule% overwrite rule
\xqrcode@int% package macro
\let\rule\xrule% restore rule
}
\makeatother
% option 1: tikz (slow but flexible); tikz package
% \newcommand{\altrule}[2]{\tikzpicture% custom tikz rule
% \fill[rounded corners=.3mm] (0,0) rectangle (#1,#2);
% \endtikzpicture}
% option 2: any character (fast but less flexible); graphicx package
\newcommand{\altsym}{$\bullet$}% alt symbol
\newcommand{\altrule}[2]{% custom rule: logix
\resizebox{#1}{!}{%
\ifdim#2>0pt\altsym\else\phantom{\altsym}\fi}}
\begin{document}
\qrcode{348b0b3}
\end{document}
Result

\rulewithin\qrcode. However, the result may not be what you expect, because the package draws each pixel independently, so connected blocks of black will appear as black dots, instead of a black rectangle with rounded corners. – jessexknight Feb 20 '24 at 22:29