2011-05-06 1 views
1

Je voulais créer une application qui, lorsqu'elle est lancée, affiche un menu. C'est comme lorsque vous ouvrez une application de messagerie en S60. Voici une capture d'écran.Création d'un menu d'application similaire à Symbian sur S60

what i want

Comment puis-je faire? J'ai essayé de faire le centralWidget de QMainWindow en tant que QMenu et en ajoutant QAction au QMenu. Mais quand je l'exécute, l'application ne montre rien. Et j'ai essayé de faire le QMenu en utilisant QMenuBar. Et ça se voit bien. Mais je ne peux pas utiliser la touche haut/bas pour sélectionner un menu dans l'appareil. Et quand j'appuie sur la touche d'options (Qt :: PositiveSoftKey), la barre de menus apparaît aussi. Et je n'ai même pas ajouté cela à menuBar() qui appartient à QMainWindow.

Voici mon premier code:

QAction* act1= new QAction(tr("act1"),this); 
QObject::connect(tes,SIGNAL(triggered()),this,SLOT(close())); 
QAction* act2= new QAction(tr("act2"),this); 
QObject::connect(tes,SIGNAL(triggered()),this,SLOT(close())); 
QMenu* menu = new QMenu(this); 
menu->addAction(act1); 
menu->addAction(act2); 
setCentralWidget(menu); 

Et il ne montre rien aux applications.

Et voici mon deuxième essai:

Qt Code: Switch view 
QAction* act1= new QAction(tr("act1"),this); 
QObject::connect(tes,SIGNAL(triggered()),this,SLOT(close())); 
QAction* act2= new QAction(tr("act2"),this); 
QObject::connect(tes,SIGNAL(triggered()),this,SLOT(close())); 
QMenuBar* menubar = new QMenuBar(this); 
QMenu* menu = menubar->addMenu(tr("menu")); 
menu->addAction(act1); 
menu->addAction(act2); 
setCentralWidget(menu); 

Il montre le menu. Mais lorsque je déploie sur l'appareil, je ne peux pas utiliser le clavier pour sélectionner le menu. Et au simulateur, si je clique sur un autre endroit que l'élément QAction, le menu est perdu.

J'utilise une autre approche en utilisant QPushButton avec la disposition verticale. Voici le code:

QWidget* centralWidget = new QWidget(this); 
QScrollArea* scrollArea = new QScrollArea(this); 
scrollArea->setWidget(centralWidget); 
scrollArea->setWidgetResizable(true); 
setCentralWidget(scrollArea); 

QVBoxLayout* centralLayout = new QVBoxLayout(centralWidget); 
QPushButton* button1 = new QPushButton(tr("button 1")); 
QPushButton* button2 = new QPushButton(tr("button 2")); 
centralLayout->addWidget(button1); 
centralLayout->addWidget(button2); 
centralLayout->setContentsMargins(0,0,0,0); 
button1->setFocus(); 

Voici son look:

8button

D'accord, et qui est l'air assez bon. Mais si c'est 8 bouton. Si elle est à seulement 2 ont le bouton, il ressemble à ceci:

2button

ressemble un peu bizarre, hein? Un moyen d'empêcher cela?

Répondre

2

Pour moi, l'interface utilisateur que vous essayez de reproduire une liste d'options, donc, pourquoi ne pas essayer de créer l'interface utilisateur basée sur un widget liste?

Asumming que vous allez utiliser une liste, vous devez les options dont vous avez à choisir en fonction de vos besoins et vos exigences d'applications:

  • Qt Widgets: Disponible dans tous les Qt pris en charge Plataforms. Créé pour le bureau et fonctionne très bien, mais dans un sentiment étrange sur les appareils mobiles. Jetez un oeil à la QListWidget et QListView.

  • Qt Quick: Il n'est pas disponible pour les téléphones S40 ou S60 3ème édition, pas disponible pour les téléphones sans contact, essentiellement.Créé pour les "interfaces tactiles activées", il n'offre pas encore un ensemble stable de widgets (boutons, comboboxes), mais il offre un ensemble de primitives (comme des rectangles ou des images) qui vous donne beaucoup de liberté pour créer vos interfaces utilisateur. ça a l'air plutôt bien. Je pense que c'est ce que Lucian a utilisé pour créer l'interface utilisateur à partir de sa réponse. Cet exemple pourrait être particulièrement intéressant: http://doc.qt.io/archives/qt-4.7/all-examples.html

Exécutez le QtDemo pour voir tous les exemples live!

J'espère que ça aide!

EDIT: Ajout d'exemple de QListWidget

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent), ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    for(int i=0; i<10; i++) { 
     QListWidgetItem *item = new QListWidgetItem(QIcon("Qt.png"), QString("Item %1").arg(i)); 
     ui->listWidget->insertItem(i, item); 
    } 
    ui->listWidget->setIconSize(QSize(64, 64)); 

    connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(onItemClicked(QListWidgetItem*))); 
} 

void MainWindow::onItemClicked(QListWidgetItem *item) 
{ 
    QMessageBox::information(this, "", QString("%1 pressed").arg(item->text())); 
} 

QListWidget on Qt SDK Emulator

+0

pouvez-vous me donner un exemple en utilisant QListWidget ou QListView? Je dois l'utiliser pour S60 sans contact. J'ai déjà essayé QListWidget, mais il a besoin de QListWidgetItem pour l'utiliser. J'ai essayé d'hériter QPushButton et QListWidgetItem mais cela ne fonctionne pas bien. – dieend

+0

Il n'est pas nécessaire d'hériter de QPushButton, le QListWidget peut émettre des signaux pour informer qu'il a été cliqué ou sélectionné. Ceci est montré dans l'exemple que j'ai ajouté. –

+0

Je viens de le déployer sur l'appareil. La vue est bonne. Mais je ne peux pas cliquer dessus. :(Avez-vous une idée? Au simulateur, il fonctionne bien. :( – dieend

-1

Vous avez toute la liberté dans le monde pour créer votre mise en page comme vous le souhaitez. Vous voulez que ces boutons se rapprochent? Voulez-vous les centrés dans la vue?

L'image ci-jointe m'a pris 30 secondes pour créer et semble déjà décent (selon mes compétences de concepteur de pour).

enter image description here

+0

Comment faites-vous cela? – dieend

Questions connexes