无法设置文本字段来填充QML中的宽度

时间:2019-01-25 03:04:50

标签: qt qml qt5 qt-quick

我正在关注YouTube上的this教程,该人员设置了TextField来填充RowLayout的宽度。但是,它似乎对我不起作用。我尝试在Layout.fillWidth上使用CheckBox,它似乎工作得很好,但似乎不想在TextField上工作。这是我的代码:

main.qml:

import QtQuick 2.9
import QtQuick.Controls 2.2

ApplicationWindow
{
    visible: true;
    width: 640;
    height: 480;
    title: qsTr("Tabs");

    ToDoList
    {
        anchors.centerIn: parent;
    }
}

ToDoList.qml:

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3

Frame
{
    ListView
    {
        // Using implicit width and height allows the frame to automatically scale to the size of the list view
        implicitWidth: 250
        implicitHeight: 250
        clip: true
        model: 100
        delegate: RowLayout {
            width: parent.width

            CheckBox {}
            TextField
            {
                Layout.fillWidth: true
            }
        }
    }
}

这是我的头像的屏幕截图

enter image description here

我做错了什么?

我不知道这是否与它有关,但是我做了一个“ Qt Quick Application-Swipe”而不是“ Qt Quick Controls 2 Application”,因为该选项对我不可用。预先感谢您的帮助。

编辑:我已编写了逐步说明,以在下面复制该问题。

  1. 文件>新文件或项目
  2. 在新窗口中,确保选择“应用程序”,然后单击“ Qt快速应用程序-轻扫”,然后按“选择”
  3. 设置项目的任何名称,然后单击“下一步”
  4. 将构建系统设置为“ qmake”,然后单击“下一步”
  5. 将所需的最低Qt版本设置为“ Qt 5.9”,将Qt快速控件样式设置为“ Material Dark”,然后单击“下一步”
  6. 选择“ Desktop Qt 5.12.0 MSVC2017 64bit”作为工具包,然后单击“ Next”
  7. 将选项设置为没有版本控制,然后单击“完成”

  8. 从“项目”窗格中删除“ Page1Form.ui.qml”和“ Page2Form.ui.qml”

  9. 将“ main.qml”的内容替换为:
import QtQuick 2.9
import QtQuick.Controls 2.2

ApplicationWindow
{
    visible: true;
    width: 640;
    height: 480;
    title: qsTr("Tabs");

    ToDoList
    {
        anchors.centerIn: parent;
    }
}
  1. 右键单击根项目文件,然后单击“添加新项”
  2. 在新窗口中,确保选择“ Qt”,然后单击“ QML File(Qt Quick 2)”,然后按“选择”。
  3. 将文件命名为“ ToDoList”,然后单击“下一步”
  4. 添加到项目“ qml.qrc前缀:/”,然后将选项设置为没有版本控制,然后单击“完成”
  5. 将“ ToDoList.qml”的内容替换为:
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3

Frame
{
    ListView
    {
        // Using implicit width and height allows the frame to automatically scale to the size of the list view
        implicitWidth: 250
        implicitHeight: 250
        clip: true
        model: 100
        delegate: RowLayout {
            width: parent.width

            CheckBox {}
            TextField
            {
                Layout.fillWidth: true
            }
        }
    }
}
  1. 运行项目

1 个答案:

答案 0 :(得分:0)

宽度设置正确。问题出在TextField样式上。您可以通过设置背景来检查它,例如

TextField
{
    Layout.fillWidth: true
    background: Rectangle {
        color: "red"
    }
}

或者只是开始在包含和不包含Layout.fillWidth: true

的字段中输入