Как создать виджет с QDateEdit - PullRequest
1 голос
/ 22 марта 2019

Согласно моему пониманию документации API QDateEdit, он создает виджет для редактирования дат.Единственные открытые члены, которые это имеют, являются конструкторами.Поэтому я в основном создал приложение виджетов QT с использованием создателя QT и добавил следующий код.

QTextStream cout(stdout);
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QDate d1(2002,4,1)

    QDateEdit dateEdit(d1,0);

    return EXIT_SUCCESS;
}

Даже при отсутствии ошибок, виджет / окно также не отображаются.Что я не получаю?

Ответы [ 3 ]

1 голос
/ 22 марта 2019

вызовите метод показа

dateEdit.show();

это требуется, потому что QDateEdit является виджетом и не будет отображаться по умолчанию ...

просто сделай:

QDateEdit dateEdit(d1,0);
dateEdit.show();

редактирование:

к вашему комментарию, дополнительный вопрос;

Почему для строки типа QString = InputDialog :: getText (....) не требуется .show ()

хорошо, функция getText вызывает это внутренне:

документация: https://doc.qt.io/archives/qt-4.8/qdialog.html#exec

int QDialog :: exec ()

Показывает диалог как модальный диалог, блокируя, пока пользователь не закроет его. Функция возвращает результат DialogCode.

Если это диалоговое окно приложения, пользователи не могут взаимодействовать с любым другое окно в том же приложении, пока они не закроют диалог. Если диалог модальный, только взаимодействие с родительским окном заблокирован, пока диалог открыт. По умолчанию диалоговое окно модальное приложение.

См. Также open (), show (), result () и setWindowModality ().

исходный код:

QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label,
                              QLineEdit::EchoMode mode, const QString &text, bool *ok,
                              Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
{
    QAutoPointer<QInputDialog> dialog(new QInputDialog(parent, flags));
    dialog->setWindowTitle(title);
    dialog->setLabelText(label);
    dialog->setTextValue(text);
    dialog->setTextEchoMode(mode);
    dialog->setInputMethodHints(inputMethodHints);
    const int ret = dialog->exec();  // <== here!!!!
    if (ok)
        *ok = !!ret;
    if (ret) {
        return dialog->textValue();
    } else {
        return QString();
    }
}
0 голосов
/ 22 марта 2019

Вы создаете виджет, но не вызываете правильный метод для его отображения. В Qt есть специальный метод для этого QWidget::show(). Согласно документам, этот метод:

Показывает виджет и его дочерние виджеты.

В качестве альтернативы вы можете позвонить showFullScreen, showMaximized или setVisible(true).

Итак, попробуйте:

QDate d1(2002,4,1);
QDateEdit dateEdit(d1,0);
dateEdit.show();
0 голосов
/ 22 марта 2019

Попробуйте это:

#include <QApplication>
#include <QDate>
#include <QDateEdit>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QDate d1(2002,4,1);

    QDateEdit dateEdit(d1,0);
    dateEdit.show(); // Call show()

    return a.exec(); // Run events loop
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...