Here's how I managed to do it - using the Snow theme to override the q_list_item in qa-theme-base.
The code is a little long as it does a number of additional processing (cutting the text at end of words rather than at a fixed numerical point which would result in words being split, adding a "posted by" comment, allowing more of the comment to be made visible etc)
public function q_list_item($q_item)
{
$this->output('<div class="qa-q-list-item'.rtrim(' '.@$q_item['classes']).'" '.@$q_item['tags'].'>');
$this->q_item_main($q_item);
$this->q_item_clear();
//print_r($q_item); echo "***".$q_item['raw']['postid'];
$answers = qa_post_get_question_answers($q_item['raw']['postid']);
$rating = 0;
$content = "";
if (!empty($answers)) {
$this->output("<script type='text/javascript'>
function toggleContents(elm) {
var titleContainer = elm.parentNode.getElementsByTagName('div')[0];
var contentContainer = elm.parentNode.getElementsByTagName('div')[1];
titleContainer.style.display = (titleContainer.style.display == 'inline') ? 'none' : 'inline';
contentContainer.style.display = (contentContainer.style.display == 'inline' ) ? 'none' : 'inline';
}
</script>");
foreach ($answers as $answer) {
if ($answer['upvotes'] >= $rating) {
$rating = $answer['upvotes'];
//$answercontent = $this->embed_replace($answer['content']);
$answercontent = $answer['content'];
// Determine the part of the content we will show
$offset = (strlen($answercontent) < 250 ? strlen($answercontent) : 250);
// Cut the content at a sensible point - end of a word
$pos = strpos($answercontent,' ', $offset);
if ($pos != False) $offset = $pos;
$content = substr($answercontent,0,$offset);
$remainingcontent = substr($answercontent,$offset);
}
}
if ($remainingcontent!="") {
$remainingcontent = '<div class="devqa-q-more" style="display:inline;" onclick="toggleContents(this)">... <a href="#!">(More)</a></div>
<div class="devqa-q-moreanswers">'.$remainingcontent.'</div>';
} else {
$remainingcontent = '';
}
$this->output('<div class="devqa-q-answers">');
$this->output($content.$remainingcontent);
$this->output('</div>');
if (isset($answer['handle'])) {
// print_r($answer);
// get user details (display avatar and name)
$username = qa_db_read_all_assoc(qa_db_query_sub('SELECT handle FROM ^users WHERE userid = #',$answer['userid']), 'handle');
$user = qa_db_select_with_pending( qa_db_user_account_selectspec($username, false) );
//$revlink = isset($answer['title']) ? $answer['title'] : "Answer was edited";
//$htmloutput = (isset($answer['updated']) ? date("Y-m-d H:m", strtotime($answer['updated'])) : "");
$avatar = qa_get_user_avatar_html($user['flags'], $user['email'], $user['handle'], $user['avatarblobid'], $user['avatarwidth'], $user['avatarheight'], qa_opt('avatar_users_size'), false);
$this->output('<span class="devqa-q-answers-respondent">');
$this->output('<span class="qa-q-item-what">answered by </span>');
$this->output('<a href="./index.php?qa=user&qa_1='.$answer['handle'].'" class="qa-user-link url fn entry-title nickname"> '.$answer['handle'].' </a>');
$this->output('<span class="qa-q-item-who-data">'.'('.$answer['points'].') points</span>');
$this->output($avatar.'</span>');
}
}
$this->q_item_stats($q_item);
$this->q_item_clear();
$this->output('</div> <!-- END qa-q-list-item -->', '');
}