Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt三个组合框表示一个日期_Qt_Date_Combobox - Fatal编程技术网

Qt三个组合框表示一个日期

Qt三个组合框表示一个日期,qt,date,combobox,Qt,Date,Combobox,我一直在搜索Google和Stackoverflow,但我还没有找到任何简单的解决方案来自动填充三个组合框以表示正确的日期(如YYYY-MM-DD)。我想这可能与QCalendarWidget有关。有什么想法吗 我希望能够滚动当前时间到X年前的日期,它不应该有像2011年2月29日这样的不存在的日期。不确定这是否要求太高。现在我知道你的想法了 int X = 2; QDate date = QDate::currentDate(), lastDate = date.addYears(-X); f

我一直在搜索Google和Stackoverflow,但我还没有找到任何简单的解决方案来自动填充三个组合框以表示正确的日期(如YYYY-MM-DD)。我想这可能与QCalendarWidget有关。有什么想法吗


我希望能够滚动当前时间到X年前的日期,它不应该有像2011年2月29日这样的不存在的日期。不确定这是否要求太高。

现在我知道你的想法了

int X = 2;
QDate date = QDate::currentDate(), lastDate = date.addYears(-X);
for(; date > lastDate; date = date.addDays(-1))
    ui->comboBox->addItem(date.toString("yyyy-MM-dd"));
答案很简单。制作三个组合框:日(1-31)、月(1-12)和年(即1999-2012)。创建“确定”按钮。不需要超逻辑

按下按钮后,只需通过创建QDate对象并调用QDate::isValid()验证日期,该对象包含用户给定的三个数字。如果不是,则创建一些警告提示,并要求用户更改输入中的某些内容

验证用户输入的数据的最佳方法是重写QDialog::done()方法


为此,您必须手动将这些日期添加到组合框中。在循环中使用一些简单的逻辑。我不认为用这种方式实现它有太多的工作要做为什么您需要三个内容相同的组合框?我建议使用QDateEdit而不是QComboBoxOne框是YYYY,one框是MM,one框是DD。我将研究QDateEdit。对不起,我误解了这个问题。。。我想作者希望有三个这样的组合框。现在我明白了,他指的是一天、一个月和一年……这只是我个人的观点:另一种方法是使可用的天数取决于当前选择的月份,因此如果选择“二月”,则只能选择第1天、第28天或第29天,具体取决于年份。但这并不像你想象的那么容易使用,因为如果你开始选择日期(而月份是“二月”),你可能无法选择你想要的日期,因此你必须从年份开始,然后是月份,最后是日期。这将限制用户。
void Dialog::done(int r)
{
    if(r == QDialog::Accepted) {
        QDate date; 
        //Create QDate from comboboxes' values
        ...
        if(!date.isValid()) { 
            //Some warning to user.
            return;
        }
    }
    QDialog::done(r);
}