在S60创建类似Symbian的应用程序菜单

时间:2011-05-06 05:36:57

标签: qt layout menu symbian nokia

我想创建一个应用程序,它在启动时会显示一个菜单。就像在S60中打开Messaging应用程序一样。这是一个截图。

what i want

我该如何制作?我试图将QMainWindow的centralWidget作为QMenu,并将QAction添加到QMenu。但是当我运行它时,应用程序不会显示任何内容。我试图使用QMenuBar制作QMenu。它显示没问题。但我不能使用上/下键来选择设备中的菜单。当我按下选项键(Qt :: PositiveSoftKey)时,菜单栏也显示出来。我甚至没有将它添加到由QMainWindow拥有的menuBar()中。

这是我的第一个代码:

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和Vertical Layout的另一种方法。这是代码:

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 个答案:

答案 0 :(得分:2)

对我来说,您尝试复制的UI是一个选项列表,那么,为什么不尝试基于列表小部件创建UI?

假设您要使用列表,您必须根据自己的需求和应用程序要求选择以下选项:

  • Qt Widgets:适用于所有Qt支持的Plataforms。专为桌面而设计并在其上运行良好,但在移动设备上感觉很奇怪。请查看QListWidgetQListView

  • Qt Quick:它不适用于S40手机或S60第3版,基本上不适用于非触控手机。它是为“支持触摸的UI”而创建的,它不提供一组稳定的小部件(按钮,组合框),但它提供了一组基元(如矩形或图像),可以让您自由地创建UI和它看起来很不错。我认为这就是Lucian用来创建UI的答案。 这个例子可能特别有用: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

答案 1 :(得分:-1)

您可以通过自己喜欢的方式自由创建布局。想要那些按钮靠得更近吗?希望他们在视图中居中?

附图片花了我30秒的时间来创作并且看起来已经不错了(根据我的浇筑设计师技能)。

enter image description here