我想创建一个应用程序,它在启动时会显示一个菜单。就像在S60中打开Messaging应用程序一样。这是一个截图。
我该如何制作?我试图将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();
在这里看:
好的,那看起来还不错。但如果那有8个按钮。如果它只有2个按钮,它看起来像这样:
看起来很奇怪,是吧?有什么方法可以防止这种情况吗?
答案 0 :(得分:2)
对我来说,您尝试复制的UI是一个选项列表,那么,为什么不尝试基于列表小部件创建UI?
假设您要使用列表,您必须根据自己的需求和应用程序要求选择以下选项:
Qt Widgets:适用于所有Qt支持的Plataforms。专为桌面而设计并在其上运行良好,但在移动设备上感觉很奇怪。请查看QListWidget和QListView。
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()));
}
答案 1 :(得分:-1)
您可以通过自己喜欢的方式自由创建布局。想要那些按钮靠得更近吗?希望他们在视图中居中?
附图片花了我30秒的时间来创作并且看起来已经不错了(根据我的浇筑设计师技能)。