Не удается установить текстовое поле для заполнения ширины в QML - PullRequest
0 голосов
/ 25 января 2019

Я следую этому учебнику на YouTube, и человек устанавливает 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"- Проведите пальцем "вместо" Приложение Qt Quick Controls 2 ", так как эта опция была мне недоступна.Заранее благодарен за любую помощь.

Редактировать: я написал пошаговые инструкции для воспроизведения вопроса ниже.

  1. Файл> Новый файл или проект
  2. В новом окне убедитесь, что выбрано «Приложение», затем нажмите «Qt Quick Application - Swipe» и нажмите «Выбрать»
  3. Установите любое имя для проекта и нажмите «Далее»
  4. Установите систему сборки на "qmake" и нажмите "Далее"
  5. Установите минимальную требуемую версию Qt на "Qt 5.9", а стиль быстрых элементов управления Qt на "Material Dark" и нажмите "Далее"
  6. Выберите «Desktop Qt 5.12.0 MSVC2017 64bit» в качестве комплекта и нажмите «Далее»
  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;
    }
}
Щелкните правой кнопкой мыши по корневому файлу проекта и нажмите «Добавить новый» В новом окне убедитесь, что выбран «Qt», затем нажмите «Файл QML (Qt Quick 2)» и нажмите «Выбрать» Назовите файл «ToDoList» и нажмите «Далее» Добавить в проект «Префикс qml.qrc: /», затем установите параметры, чтобы не было контроля версий, и нажмите «Готово» Заменить содержимое "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 Ответ

0 голосов
/ 25 января 2019

Ширина установлена ​​правильно.Проблема в стиле TextField.Вы можете проверить это, установив фон, например

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

, или просто начните вводить эти поля с Layout.fillWidth: true

и без него.
...