标签: qlayout

在Qt中切换多个ui表单

我正在为嵌入式设备开发用户界面.我创建了大约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和设置.对不起,丑陋的形象.双向箭头表示我可以来回切换.单箭头表示线性运动.

c++ qt qtgui qlabel qlayout

4
推荐指数
1
解决办法
1万
查看次数

具有动态变化内容的QScrollArea

我有一个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)

c++ qt desktop-application qscrollarea qlayout

4
推荐指数
1
解决办法
5471
查看次数

与QLabel和QLineEdit中的右侧文本对齐

我有一个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

全额奖励,如果你发现在所有平台上工作,而且也适用时的字体大小都在不同的解决方案lineEditlabel.

c++ qt qlayout

4
推荐指数
1
解决办法
5817
查看次数

QWidget :: setLayout错误:尝试设置已有布局的QLayout [...]

执行时(没有编译错误)我进入控制台

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)

qt qt4 qlayout

3
推荐指数
1
解决办法
2488
查看次数

从布局中删除所有QSpacerItem

我已经QSpacerItem使用它的addStretch()方法添加了一个布局.

layout->addStretch(1);
Run Code Online (Sandbox Code Playgroud)

现在我想删除它,但我没有任何参考.

我怎样才能浏览所有QLayoutItem并且只删除QSpacerItem

c++ qt qtgui qlayout

3
推荐指数
1
解决办法
2278
查看次数

将QLabel添加到QWidget

我是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"不会显示在标签内.

请帮忙.

c++ qt qwidget qlabel qlayout

3
推荐指数
1
解决办法
2万
查看次数

所需空间最小的 QLayout

我有一个 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)

这些添加的小部件之间有很多浪费的空间:

动态 QWidegt 之间的空间被浪费

当我运行应用程序时,我可以用鼠标压缩高度。

用鼠标拖动边框压缩空间

使用限制每个widgetList_i小部件的高度setMaximumheigth()是一个很好的方法,但是我在开头和结尾浪费了空间:

最大高度

仅添加 aui->vertivalLayout->addStretch(1);会导致末尾出现空白。该布局的开头很好:

在此输入图像描述

添加 QSpacerItem 会使情况变得更糟:

空间项目

是否有一个函数可以将添加的小部件的布局高度设置为最小值?

qscrollarea qt5 qlayout qvboxlayout

3
推荐指数
1
解决办法
2303
查看次数

设置QFormLayout QLabel的垂直对齐方式

我正在使用 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)

结果如下:

带有左上对齐标签的 QFormLayout 示例

下面是一个示例,通过显式创建 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 pyqt alignment pyside qlayout

3
推荐指数
1
解决办法
1万
查看次数

使小部件在Qt布局中部分重叠

我试图让部件在Qt布局中部分重叠.我的当前布局如下,使用包含四个QHBoxLayout节点的QVBoxLayout实现:

我目前的布局是用一个包含四个QHBoxLayout子节点的QVBoxLayout实现的

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

这是我想要实现的那种重叠

不幸的是,我读过的所有Qt文档和所有Stack Overflow帖子都试图避免小部件重叠而不是寻求它.也许有一种方法可以设置小部件之间的负间距,或者强制布局计算出最大宽度(例如,根据这种情况下一套服装的卡数)?或者我是否必须创建自定义布局?也许我根本不应该使用布局?

如果有任何帮助,我会将小部件添加到布局中,代码如下所示:

hLayout[card.getSuit()-1]->addWidget(cardWidget, 0, align);
Run Code Online (Sandbox Code Playgroud)

c++ layout qt overlap qlayout

3
推荐指数
1
解决办法
2329
查看次数

QScrollArea带有动态添加的小部件

我在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)

c++ qt qscrollarea qt5 qlayout

3
推荐指数
1
解决办法
1779
查看次数