我正在为嵌入式设备开发用户界面.我创建了大约30个ui表单.您首先拥有加载数据库的欢迎表单,并自动连接到可用的已知wifi和所有启动功能.一旦加载了所有内容,下一个要加载的表单就是用户登录
如果登录是我的第二个用户界面,那么我就是这样做的
//Instantiating the Login class
Login *myLog = new Login();
//Close the welcome class
this->close();
//open the Login class
myLog->show();
Run Code Online (Sandbox Code Playgroud)
这是在多个UI之间切换的正确方法吗?该软件可以想像任何具有多个图标按钮的智能手机设备,以打开不同的应用程序.每个应用程序或文件夹都有自己的功能.我有一个主页按钮,可以回到主菜单主页等等.我已经使用上面给出的代码在各种ui表单之间切换,我不确定这是不是这样的方法.我是Qt的新手,我被要求在2周内完成这项任务,我创造了我找到的最简单的方法.还有更好的方法吗?
任何帮助或指导表示赞赏.如果你能给我链接以便更好地理解它会很棒
谢谢
编辑

每个ui表单都有一个快捷面板,可直接访问登录,主菜单,设置电源选项,wifi选项(在设置中).1下显示的布局流程类似于2,3和设置.对不起,丑陋的形象.双向箭头表示我可以来回切换.单箭头表示线性运动.
我有一个QScrollArea,里面有一些按钮,如图所示.

布局的想法是:1.当按钮太宽时,应使用左右按钮滚动按钮
2.滚动区域中的按钮数量可以动态更改3.应尽可能使用任何可用空间来扩展滚动区域.如果不存在这样的空间,则应使用导航按钮进行滚动.
随着我当前的实现,当我增加按钮我有这个:

但是右边有自由空间,所以看起来应该是这样的:

例如,如果我再次增加到10,那么应该出现滚动条(因为小部件会占用布局).
我想知道除了手动调整窗口小部件之外是否还有其他方法(因为ui可以翻译,按钮可以改变大小提示,真正的设计也更复杂:(
这是我对ScrollAreaTest小部件的实现:
#include "MainWidget.h"
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QScrollArea>
#include <QPushButton>
#include <QDebug>
#include "ButtonWidget.h"
#include "CheckableButtonGroup.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent),
m_scrollArea( 0 ),
m_lineEdit( 0 ),
m_buttons( 0 )
{
QVBoxLayout* mainLayout = new QVBoxLayout( this );
QWidget* firstRow = new QWidget;
QHBoxLayout* firstRowLayout = new QHBoxLayout( firstRow );
QPushButton* left = new QPushButton;
QPushButton* right = new QPushButton;
m_buttons = new CheckableButtonGroup( Qt::Horizontal );
m_buttons->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
m_buttons->setButtonsCount( …Run Code Online (Sandbox Code Playgroud) 我有一个QLabel正好在下面的a QLineEdit具有相同的大小和对齐属性:
QLineEdit *lineEdit = new QLineEdit("999");
lineEdit->setFixedWidth(100);
lineEdit->setAlignment(Qt::AlignRight);
//
QLabel *label = new QLabel("999");
label->setFixedWidth(100);
label->setAlignment(Qt::AlignRight);
//
QLayout *layout = new QVBoxLayout;
layout->addWidget(lineEdit);
layout->addWidget(label);
Run Code Online (Sandbox Code Playgroud)
以下是渲染方式:
如何让底部的文本与文本label完全正确对齐lineEdit?
全额奖励,如果你发现在所有平台上工作,而且也适用时的字体大小都在不同的解决方案lineEdit和label.
执行时(没有编译错误)我进入控制台
QWidget :: setLayout:试图在CGSearchResult""上设置QLayout"",它已经有了布局
我使用以下代码:
CGSearchResult::CGSearchResult(QWidget *parent) : QWidget(parent)
{
initControls();
SetTableContent();
}
void CGSearchResult::initControls()
{
backButton = new QPushButton(tr("&Back"));
connect(backButton, SIGNAL(clicked()), this, SLOT(showHome()));
model=new QStandardItemModel();
QWidget::setFont(QFont("Courier New", 8, QFont::Bold));
searchTable = new QTableView(this);
searchTable->showGrid();
searchTable->resize(720,400);
searchTable->horizontalHeader()->setDefaultSectionSize(170);
searchTable->verticalHeader()->setDefaultSectionSize(50);
searchTable->verticalHeader()->hide();
searchTable->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
searchTable->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QGridLayout *layout = new QGridLayout();
layout->addWidget(backButton, 0, 0, 1, 1);
layout->addWidget(searchTable, 2, 0, 1, 1);
setLayout(layout);
}
Run Code Online (Sandbox Code Playgroud) 我已经QSpacerItem使用它的addStretch()方法添加了一个布局.
layout->addStretch(1);
Run Code Online (Sandbox Code Playgroud)
现在我想删除它,但我没有任何参考.
我怎样才能浏览所有QLayoutItem并且只删除QSpacerItem?
我是Qt和C++的新手,正在开发一个应用程序,我正在尝试使用QHBoxLayout在QWidget中添加QLabel.我将标签文本设置为某些内容但在标签中不可见.
这是代码片段:
setStyleSheet( "QWidget{ background-color : rgba( 160, 160, 160, 255); border-radius : 7px; }" );
QLabel *label = new QLable(this);
QHBoxLayout *layout = new QHBoxLayout();
label->setText("Random String");
layout->addWidget(label);
setLayout(layout);
Run Code Online (Sandbox Code Playgroud)
styleSheet用于添加QLabel的Widget.
字符串"random String"不会显示在标签内.
请帮忙.
我有一个 QVBoxLayout,其中我在运行时动态添加其他 QWidget :
for(int i = 0; i < value; i++)
{
QList<QWidget*> widgetList_i;
//... widgetList_i.append(a lot of widgets)
ui->verticalLayout->addWidget(widget_i);
}
Run Code Online (Sandbox Code Playgroud)
这些添加的小部件之间有很多浪费的空间:
当我运行应用程序时,我可以用鼠标压缩高度。
使用限制每个widgetList_i小部件的高度setMaximumheigth()是一个很好的方法,但是我在开头和结尾浪费了空间:
仅添加 aui->vertivalLayout->addStretch(1);会导致末尾出现空白。该布局的开头很好:
添加 QSpacerItem 会使情况变得更糟:
是否有一个函数可以将添加的小部件的布局高度设置为最小值?
我正在使用 PySide/PyQt,但这是一个一般的 Qt 问题。
有没有办法设置 QFormLayout 以便标签垂直居中,而不必显式创建 QLabel 并将其垂直大小策略设置为首先扩展?当第 2 列中的小部件比我的标签高时,我希望我的标签与小部件垂直居中,而不是与其顶部对齐...
这是演示该问题的示例脚本。我将标签涂成红色,以更好地展示它们的尺寸行为。
from PySide import QtCore, QtGui
app = QtGui.QApplication([])
widget = QtGui.QWidget()
widget.setStyleSheet("QLabel { background-color : red}")
layout = QtGui.QFormLayout()
layout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
layout.setLabelAlignment(QtCore.Qt.AlignCenter)
editor1 = QtGui.QLineEdit()
editor1.setFixedSize(300, 100)
editor2 = QtGui.QLineEdit()
editor2.setFixedSize(300, 100)
layout.addRow('Input', editor1)
layout.addRow('Longer Named Input', editor2)
widget.setLayout(layout)
widget.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
结果如下:
下面是一个示例,通过显式创建 QLabel 并为其提供扩展大小策略来演示所需的结果:
from PySide import QtCore, QtGui
app = QtGui.QApplication([])
widget = QtGui.QWidget()
widget.setStyleSheet("QLabel { background-color : red}")
layout = QtGui.QFormLayout()
layout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
layout.setLabelAlignment(QtCore.Qt.AlignCenter)
editor1 = QtGui.QLineEdit() …Run Code Online (Sandbox Code Playgroud) 我试图让部件在Qt布局中部分重叠.我的当前布局如下,使用包含四个QHBoxLayout子节点的QVBoxLayout实现:

我正在尝试重新组合相同花色的卡片,以达到类似的效果(注意水平和垂直重叠):

不幸的是,我读过的所有Qt文档和所有Stack Overflow帖子都试图避免小部件重叠而不是寻求它.也许有一种方法可以设置小部件之间的负间距,或者强制布局计算出最大宽度(例如,根据这种情况下一套服装的卡数)?或者我是否必须创建自定义布局?也许我根本不应该使用布局?
如果有任何帮助,我会将小部件添加到布局中,代码如下所示:
hLayout[card.getSuit()-1]->addWidget(cardWidget, 0, align);
Run Code Online (Sandbox Code Playgroud) 我在QScrollArea中放置自定义小部件时遇到一些问题.我的自定义小部件在QGridLayout中包含4个标签填充它.现在我想将这个小部件保存在QScrollArea中,并且能够为它添加更多标签,但我想只在视口中显示其中的4个.
这就是QScrollArea中带有4个标签的widget的样子:
在添加两个标签之后,这里是QScrollArea中的小部件,其中红色矩形是视口.

我怎样才能达到这样的效果?
===================================
UPDATE
我最终使用以下代码解决了我的问题.它可能需要一些小间距修复.
#include "QtGuiApplication2.h"
#include "qscrollarea.h"
#include "CustomWidget.h"
QtGuiApplication2::QtGuiApplication2(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QScrollArea * qScrollArea = new QScrollArea();
CustomWidget * customWidget = new CustomWidget(this);
qScrollArea->setWidget(customWidget);
qScrollArea->setWidgetResizable(true);
qScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ui.mainLayout->addWidget(qScrollArea, 1, 1, 1, 1);
}
Run Code Online (Sandbox Code Playgroud)
CustomWidget类:
#include "CustomWidget.h"
#include "qlabel.h"
CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent)
{
labelsNum = 4;
rows = 2;
layout = new QGridLayout();
this->setLayout(layout);
QMargins * margin = new QMargins(10, 10, 10, 10);
layout->setContentsMargins(*margin);
layout->setHorizontalSpacing(5);
layout->setVerticalSpacing(5);
initLabels();
addLabels();
}
CustomWidget::~CustomWidget()
{
}
void …Run Code Online (Sandbox Code Playgroud)