author | harlekin <harlekin> | 2004-01-07 22:59:40 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2004-01-07 22:59:40 (UTC) |
commit | c4d6574e85f74d6086c1709ecf0d117df7417222 (patch) (side-by-side diff) | |
tree | 73ec72034552ff8def55dd8c0b7115d05a2d3260 | |
parent | 872dc276a047a289561779fb59ab4ce45aaa9062 (diff) | |
download | opie-c4d6574e85f74d6086c1709ecf0d117df7417222.zip opie-c4d6574e85f74d6086c1709ecf0d117df7417222.tar.gz opie-c4d6574e85f74d6086c1709ecf0d117df7417222.tar.bz2 |
bring over some enhancements I allready did in branch
-rw-r--r-- | noncore/settings/sysinfo/detail.cpp | 6 | ||||
-rw-r--r-- | noncore/settings/sysinfo/main.cpp | 1 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesinfo.cpp | 5 | ||||
-rw-r--r-- | noncore/settings/sysinfo/processinfo.cpp | 3 | ||||
-rw-r--r-- | noncore/settings/sysinfo/storage.cpp | 1 | ||||
-rw-r--r-- | noncore/settings/sysinfo/versioninfo.cpp | 16 |
6 files changed, 6 insertions, 26 deletions
diff --git a/noncore/settings/sysinfo/detail.cpp b/noncore/settings/sysinfo/detail.cpp index 2c5fdc4..79daa2b 100644 --- a/noncore/settings/sysinfo/detail.cpp +++ b/noncore/settings/sysinfo/detail.cpp @@ -1,50 +1,44 @@ /********************************************************************** ** Detail ** ** Display module information ** ** Copyright (C) 2002, Michael Lauer ** mickey@tm.informatik.uni-frankfurt.de ** http://www.Vanille.de ** ** Based on ProcessDetail by Dan Williams <williamsdr@acm.org> ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "detail.h" #include <sys/types.h> #include <stdio.h> -#include <qcombobox.h> #include <qlayout.h> -#include <qlistview.h> -#include <qmessagebox.h> -#include <qpushbutton.h> -#include <qtextview.h> -#include <qwhatsthis.h> Detail::Detail( QWidget* parent, const char* name, WFlags ) : QWidget( parent, name, WStyle_ContextHelp ) { QVBoxLayout *layout = new QVBoxLayout( this ); detailView = new QTextView( this ); detailView->setTextFormat( PlainText ); layout->addWidget( detailView ); } Detail::~Detail() { } diff --git a/noncore/settings/sysinfo/main.cpp b/noncore/settings/sysinfo/main.cpp index 02b1098..d071f71 100644 --- a/noncore/settings/sysinfo/main.cpp +++ b/noncore/settings/sysinfo/main.cpp @@ -1,27 +1,26 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "sysinfo.h" -#include <qpe/qpeapplication.h> #include <opie/oapplicationfactory.h> OPIE_EXPORT_APP( OApplicationFactory<SystemInfo> ) diff --git a/noncore/settings/sysinfo/modulesinfo.cpp b/noncore/settings/sysinfo/modulesinfo.cpp index 0bf51e8..566b179 100644 --- a/noncore/settings/sysinfo/modulesinfo.cpp +++ b/noncore/settings/sysinfo/modulesinfo.cpp @@ -1,127 +1,122 @@ /********************************************************************** ** ModulesInfo ** ** Display Modules information ** ** Copyright (C) 2002, Michael Lauer ** mickey@tm.informatik.uni-frankfurt.de ** http://www.Vanille.de ** ** Based on ProcessInfo by Dan Williams <williamsdr@acm.org> ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include <qpe/qpeapplication.h> -#include <qcombobox.h> #include <qfile.h> -#include <qheader.h> #include <qlayout.h> -#include <qlistview.h> #include <qmessagebox.h> -#include <qpushbutton.h> -#include <qstring.h> #include <qtimer.h> #include <qwhatsthis.h> #include "modulesinfo.h" #include "detail.h" ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); ModulesView = new QListView( this ); int colnum = ModulesView->addColumn( tr( "Module" ) ); colnum = ModulesView->addColumn( tr( "Size" ) ); ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ModulesView->addColumn( tr( "Use#" ) ); ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ModulesView->addColumn( tr( "Used by" ) ); ModulesView->setAllColumnsShowFocus( TRUE ); layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); QWhatsThis::add( ModulesView, tr( "This is a list of all the kernel modules currently loaded on this handheld device.\n\nClick and hold on a module to see additional information about the module, or to unload it." ) ); // Test if we have /sbin/modinfo, and if so, allow module detail window if ( QFile::exists( "/sbin/modinfo" ) ) { QPEApplication::setStylusOperation( ModulesView->viewport(), QPEApplication::RightOnHold ); connect( ModulesView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), this, SLOT( viewModules( QListViewItem * ) ) ); } CommandCB = new QComboBox( FALSE, this ); CommandCB->insertItem( "modprobe -r" ); CommandCB->insertItem( "rmmod" ); // I can't think of other useful commands yet. Anyone? layout->addWidget( CommandCB, 1, 0 ); QWhatsThis::add( CommandCB, tr( "Select a command here and then click the Send button to the right to send the command to module selected above." ) ); QPushButton *btn = new QPushButton( this ); btn->setMinimumSize( QSize( 50, 24 ) ); btn->setMaximumSize( QSize( 50, 24 ) ); btn->setText( tr( "Send" ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); layout->addWidget( btn, 1, 1 ); QWhatsThis::add( btn, tr( "Click here to send the selected command to the module selected above." ) ); QTimer *t = new QTimer( this ); connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); t->start( 5000 ); updateData(); ModulesDtl = new Detail(); QWhatsThis::add( ModulesDtl->detailView, tr( "This area shows detailed information about this module." ) ); } ModulesInfo::~ModulesInfo() { } void ModulesInfo::updateData() { char modname[64]; char usage[200]; int modsize, usecount; QString selectedmod; QListViewItem *curritem = ModulesView->currentItem(); if ( curritem ) { selectedmod = curritem->text( 0 ); } ModulesView->clear(); FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r"); if ( procfile ) { QListViewItem *newitem; QListViewItem *selecteditem = 0x0; while ( true ) { modname[0] = '\0'; usage[0] = '\0'; int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage ); if ( success == EOF ) break; QString qmodname = QString( modname ); QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' ); QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' ); QString qusage = QString( usage ); newitem = new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage ); diff --git a/noncore/settings/sysinfo/processinfo.cpp b/noncore/settings/sysinfo/processinfo.cpp index 709158d..af0fe26 100644 --- a/noncore/settings/sysinfo/processinfo.cpp +++ b/noncore/settings/sysinfo/processinfo.cpp @@ -1,122 +1,119 @@ /********************************************************************** ** ProcessInfo ** ** Display process information ** ** Copyright (C) 2002, Dan Williams ** williamsdr@acm.org ** http://draknor.net ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include <qpe/qpeapplication.h> #include <qdir.h> -#include <qfile.h> -#include <qheader.h> #include <qlayout.h> -#include <qlistview.h> #include <qmessagebox.h> #include <qtimer.h> #include <qwhatsthis.h> #include <sys/types.h> #include <signal.h> #include "processinfo.h" #include "detail.h" ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); ProcessView = new QListView( this, "ProcessView" ); int colnum = ProcessView->addColumn( tr( "PID" ) ); ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ProcessView->addColumn( tr( "Command" ),96 ); colnum = ProcessView->addColumn( tr( "Status" ) ); colnum = ProcessView->addColumn( tr( "Time" ) ); ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); ProcessView->setAllColumnsShowFocus( TRUE ); QPEApplication::setStylusOperation( ProcessView->viewport(), QPEApplication::RightOnHold ); connect( ProcessView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), this, SLOT( viewProcess( QListViewItem * ) ) ); layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 ); QWhatsThis::add( ProcessView, tr( "This is a list of all the processes on this handheld device.\n\nClick and hold on a process to see additional information about the process, or to send a signal to it." ) ); SignalCB = new QComboBox( FALSE, this, "SignalCB" ); SignalCB->insertItem( " 1: SIGHUP" ); SignalCB->insertItem( " 2: SIGINT" ); SignalCB->insertItem( " 3: SIGQUIT" ); SignalCB->insertItem( " 5: SIGTRAP" ); SignalCB->insertItem( " 6: SIGABRT" ); SignalCB->insertItem( " 9: SIGKILL" ); SignalCB->insertItem( "14: SIGALRM" ); SignalCB->insertItem( "15: SIGTERM" ); SignalCB->insertItem( "18: SIGCONT" ); SignalCB->insertItem( "19: SIGSTOP" ); layout->addWidget( SignalCB, 1, 0 ); QWhatsThis::add( SignalCB, tr( "Select a signal here and then click the Send button to the right to send to this process." ) ); SendButton = new QPushButton( this, "SendButton" ); SendButton->setMinimumSize( QSize( 50, 24 ) ); SendButton->setMaximumSize( QSize( 50, 24 ) ); SendButton->setText( tr( "Send" ) ); connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); layout->addWidget( SendButton, 1, 1 ); QWhatsThis::add( SendButton, tr( "Click here to send the selected signal to this process." ) ); QTimer *t = new QTimer( this ); connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); t->start( 5000 ); updateData(); ProcessDtl = new Detail(); QWhatsThis::add( ProcessDtl->detailView, tr( "This area shows detailed information about this process." ) ); } ProcessInfo::~ProcessInfo() { } void ProcessInfo::updateData() { int pid, ppid, pgrp, session, tty, tpgid, utime, stime, cutime, cstime, counter, priority, starttime, signal, blocked, sigignore, sigcatch; uint flags, minflt, cminflt, majflt, cmajflt, timeout, itrealvalue, vsize, rss, rlim, startcode, endcode, startstack, kstkesp, kstkeip, wchan; char state; char comm[64]; QString selectedpid; QListViewItem *curritem = ProcessView->currentItem(); if ( curritem ) { selectedpid = curritem->text( 0 ); } ProcessView->clear(); QListViewItem *newitem; QListViewItem *selecteditem = 0x0; QDir *procdir = new QDir("/proc", 0, QDir::Name, QDir::Dirs); QFileInfoList *proclist = new QFileInfoList(*(procdir->entryInfoList())); if ( proclist ) { QFileInfoListIterator it(*proclist); QFileInfo *f; while ( ( f = it.current() ) != 0 ) { diff --git a/noncore/settings/sysinfo/storage.cpp b/noncore/settings/sysinfo/storage.cpp index 4ef7122..fc583e3 100644 --- a/noncore/settings/sysinfo/storage.cpp +++ b/noncore/settings/sysinfo/storage.cpp @@ -1,123 +1,122 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // additions copyright 2002 by L.J. Potter #include <qpe/storage.h> #include <qlabel.h> #include <qlayout.h> #include <qscrollview.h> -#include <qtimer.h> #include <qwhatsthis.h> #include "graph.h" #include "storage.h" #include <stdio.h> #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) #include <sys/vfs.h> #include <mntent.h> #endif FileSysInfo::FileSysInfo( QWidget *parent, const char *name ) : QWidget( parent, name ) { QVBoxLayout *tmpvb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); tmpvb->addWidget( sv, 0, 0 ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); container = new QWidget( sv->viewport() ); sv->addChild( container ); vb = 0x0; storage = new StorageInfo( this ); connect( storage, SIGNAL( disksChanged() ), this, SLOT( disksChanged() ) ); lines.setAutoDelete(TRUE); rebuildDisks = TRUE; updateMounts(); startTimer( 5000 ); } void FileSysInfo::timerEvent(QTimerEvent*) { updateMounts(); } void FileSysInfo::updateMounts() { storage->update(); if ( rebuildDisks ) { disks.clear(); lines.clear(); delete vb; vb = new QVBoxLayout( container/*, n > 3 ? 1 : 5*/ ); bool frst=TRUE; FileSystem *fs; for ( QListIterator<FileSystem> it(storage->fileSystems()); it.current(); ++it ) { fs = it.current(); if ( !frst ) { QFrame *f = new QFrame( container ); vb->addWidget(f); f->setFrameStyle( QFrame::HLine | QFrame::Sunken ); lines.append(f); f->show(); } frst = FALSE; MountInfo *mi = new MountInfo( fs, container ); vb->addWidget( mi ); disks.insert( fs->path(), mi ); mi->show(); QString tempstr = fs->name().left( 2 ); if ( tempstr == tr( "CF" ) ) QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used on this Compact Flash memory card." ) ); else if ( tempstr == tr( "Ha" ) ) QWhatsThis::add( mi, tr( "This graph represents how much storage is currently used on this hard drive." ) ); else if ( tempstr == tr( "SD" ) ) QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used on this Secure Digital memory card." ) ); else if ( tempstr == tr( "SC" ) ) QWhatsThis::add( mi, tr( "This graph represents how much storage is currently used on this hard drive." ) ); else if ( tempstr == tr( "In" ) ) QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the built-in memory (i.e. Flash memory) on this handheld device." ) ); else if ( tempstr == tr( "RA" ) ) QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the temporary RAM disk." ) ); } vb->addStretch(); } else { for (QDictIterator<MountInfo> i(disks); i.current(); ++i) i.current()->updateData(); } rebuildDisks = FALSE; } diff --git a/noncore/settings/sysinfo/versioninfo.cpp b/noncore/settings/sysinfo/versioninfo.cpp index 1984823..c44a05a 100644 --- a/noncore/settings/sysinfo/versioninfo.cpp +++ b/noncore/settings/sysinfo/versioninfo.cpp @@ -1,165 +1,161 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qpe/resource.h> #include <qpe/version.h> #include <qfile.h> -#include <qimage.h> #include <qlabel.h> #include <qlayout.h> -#include <qpixmap.h> -#include <qpainter.h> #include <qscrollview.h> #include <qtextstream.h> -#include <qtimer.h> #include <qwhatsthis.h> #include "versioninfo.h" #include <opie/odevice.h> using namespace Opie; VersionInfo::VersionInfo( QWidget *parent, const char *name, WFlags f ) : QWidget( parent, name, f ) { setMinimumSize( 200, 150 ); QVBoxLayout *tmpvb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); tmpvb->addWidget( sv, 0, 0 ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); QWidget *container = new QWidget( sv->viewport() ); sv->addChild( container ); QVBoxLayout *vb = new QVBoxLayout( container, 3 ); QString kernelVersionString; QFile file( "/proc/version" ); if ( file.open( IO_ReadOnly ) ) { QTextStream t( &file ); - QString v; - t >> v; t >> v; t >> v; - v = v.left( 20 ); + QStringList strList; + + strList = QStringList::split( " " , t.read(), false ); + kernelVersionString = "<qt>" + tr( "<b>Linux Kernel</b><p>Version: " ); - kernelVersionString.append( v ); + kernelVersionString.append( strList[2] ); kernelVersionString.append( "<br>" ); - t >> v; kernelVersionString.append( tr( "Compiled by: " ) ); - kernelVersionString.append( v ); + kernelVersionString.append( strList[3] ); kernelVersionString.append("</qt>"); file.close(); } QString palmtopVersionString = "<qt>" + tr( "<b>Opie</b><p>Version: " ); palmtopVersionString.append( QPE_VERSION ); palmtopVersionString.append( "<br>" ); #ifdef QPE_VENDOR QString builder = QPE_VENDOR; #else QString builder = "Unknown"; #endif palmtopVersionString.append( tr( "Compiled by: " ) ); palmtopVersionString.append( builder ); palmtopVersionString.append( "<br>" ); palmtopVersionString.append( tr( "Built on: " ) ); palmtopVersionString.append( __DATE__ ); palmtopVersionString.append( "</qt>" ); QHBoxLayout *hb1 = new QHBoxLayout( vb ); hb1->setSpacing( 2 ); QLabel *palmtopLogo = new QLabel( container ); QImage logo1 = Resource::loadImage( "logo/opielogo" ); logo1 = logo1.smoothScale( 50, 55 ); QPixmap logo1Pixmap; logo1Pixmap.convertFromImage( logo1 ); palmtopLogo->setPixmap( logo1Pixmap ); palmtopLogo->setFixedSize( 60, 60 ); hb1->addWidget( palmtopLogo, 0, Qt::AlignTop + Qt::AlignLeft ); QLabel *palmtopVersion = new QLabel( container ); palmtopVersion->setText( palmtopVersionString ); hb1->addWidget( palmtopVersion, 1, Qt::AlignTop + Qt::AlignLeft ); QHBoxLayout *hb2 = new QHBoxLayout( vb ); hb1->setSpacing( 2 ); QLabel *linuxLogo = new QLabel( container ); QImage logo2 = Resource::loadImage( "logo/tux-logo" ); logo2 = logo2.smoothScale( 55, 60 ); QPixmap logo2Pixmap; logo2Pixmap.convertFromImage( logo2 ); linuxLogo->setPixmap( logo2Pixmap ); linuxLogo->setFixedSize( 60, 60 ); hb2->addWidget( linuxLogo, 0, Qt::AlignTop + Qt::AlignLeft ); QLabel *kernelVersion = new QLabel( container ); kernelVersion->setText( kernelVersionString ); hb2->addWidget( kernelVersion, 1, Qt::AlignTop + Qt::AlignLeft ); QHBoxLayout *hb3 = new QHBoxLayout( vb ); hb3->setSpacing( 2 ); QLabel *palmtopLogo3 = new QLabel( container ); OModel model = ODevice::inst()->model(); QString modelPixmap = "sysinfo/"; if ( model == Model_Zaurus_SLC7x0 ) modelPixmap += "zaurusc700"; else if ( model >= Model_Zaurus_SL5000 && model <= Model_Zaurus_SLB600 ) modelPixmap += "zaurus5500"; else if ( model >= Model_iPAQ_H31xx && model <= Model_iPAQ_H5xxx ) modelPixmap += "ipaq3600"; else if ( model >= Model_SIMpad_CL4 && model <= Model_SIMpad_TSinus ) modelPixmap += "simpad"; else modelPixmap += "pda"; QImage logo3 = Resource::loadImage( modelPixmap ); int width = logo3.width(); int height = logo3.height(); float aspect = float( height ) / width; logo3 = logo3.smoothScale( 50, 50.0 * aspect ); QPixmap logo3Pixmap; logo3Pixmap.convertFromImage( logo3 ); palmtopLogo3->setPixmap( logo3Pixmap ); palmtopLogo3->setFixedSize( 60, 100 ); hb3->addWidget( palmtopLogo3, 0, Qt::AlignTop + Qt::AlignLeft ); QString systemString = "<qt><b>"; systemString.append( ODevice::inst()->systemString() ); systemString.append( "</b>" ); systemString.append( tr( "<p>Version: " ) ); systemString.append( ODevice::inst()->systemVersionString() ); systemString.append( tr( "<br>Model: " ) ); systemString.append( ODevice::inst()->modelString() ); systemString.append( tr( "<br>Vendor: " ) ); systemString.append( ODevice::inst()->vendorString() ); systemString.append("</qt>"); QLabel *systemVersion = new QLabel( container ); |