Создание подобного приложения для Symbian на S60 - PullRequest
1 голос
/ 06 мая 2011

Я хотел создать приложение, которое при запуске показывает меню.Это так же, как когда вы открываете приложение обмена сообщениями в S60.Вот скриншот.

what i want

Как мне это сделать?Я попытался сделать centralWidget QMainWindow как QMenu и добавить QAction в QMenu.Но когда я запускаю его, приложение ничего не показывает.И я попытался сделать QMenu, используя QMenuBar.И это шоу хорошо.Но я не могу использовать клавишу вверх / вниз, чтобы выбрать меню на устройстве.И когда я нажимаю клавишу параметров (Qt :: PositiveSoftKey), также отображается строка меню.И я даже не добавил это в menuBar (), который принадлежит QMainWindow.

Вот мой первый код:

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);

И он ничего не показывает в приложениях.

А вот и моя вторая попытка:

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);

Показывает меню.Но при развертывании на устройстве я не могу использовать клавиатуру для выбора меню.А на симуляторе, если я щелкну в другом месте, кроме пункта QAction, меню потеряно.

Я использую другой подход, используя QPushButton с вертикальной компоновкой.Вот код:

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();

Вот это выглядит:

8button

Хорошо, и это выглядит достаточно хорошо.Но если это 8 кнопок.Если на нем только 2 кнопки, это выглядит так:

2button

выглядит довольно странно, а?Есть ли способ предотвратить это?

Ответы [ 2 ]

2 голосов
/ 06 мая 2011

Для меня пользовательский интерфейс, который вы пытаетесь реплицировать, представляет собой список параметров, поэтому, почему бы не попытаться создать пользовательский интерфейс на основе виджета списка?

Как вы думаете, что вы собираетесьчтобы использовать список, вы должны выбрать опции, которые вы должны выбрать в зависимости от ваших потребностей и требований вашего приложения:

  • Виджеты Qt: Доступно во всех поддерживаемых платформой Qt формах.Создан для настольных ПК и отлично работает на нем, но на мобильных устройствах это странно.Посмотрите на QListWidget и QListView .

  • Qt Quick: Недоступно для телефонов S40или S60 3rd edition, недоступно для телефонов без сенсорного экрана.Созданный для «сенсорных интерфейсов», он пока не предлагает стабильного набора виджетов (кнопок, комбинированных списков), но он предлагает набор примитивов (например, прямоугольников или изображений), который дает вам большую свободу для создания ваших пользовательских интерфейсов иэто выглядит довольно хорошо.Я думаю, что именно это Люциан использовал для создания пользовательского интерфейса из своего ответа.Эти примеры могут представлять особый интерес: http://doc.qt.io/archives/qt-4.7/all-examples.html

Запустите QtDemo , чтобы увидеть все примеры в реальном времени!

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ: Добавление примера 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 голосов
/ 06 мая 2011

У вас есть все свободы в мире, чтобы создать свой макет так, как вам нравится.Хотите, чтобы эти кнопки были ближе друг к другу?Хотите, чтобы они были в центре изображения?

Прикрепленное изображение заняло у меня 30 секунд, и оно выглядит уже прилично (в зависимости от моих дизайнерских навыков).

enter image description here

...