Qt 基础组件复习/速学 输入控件篇input Widget

学习目标: Qt 基础组件复习/速学  输入控件篇input Widget 

前置环境

运行环境:qt creator 4.12

学习内容:

    //选择框
    MainWindow::setComboxWidget();
    //字体选择框
    MainWindow::setFontComboxWidget();
    //文本编辑
    MainWindow::setLineEdit();
    MainWindow::setTextEdit();
    //整数旋转框
    MainWindow::setSpinbox();
    //小数旋转框
    MainWindow::setDoubleSpinbox();
    //时间控件
    MainWindow::setQTimeEdit();
    //滚动条
    MainWindow::setQScrolbar();
    //快捷键操作
    MainWindow::setQkeyqueueEdit();

详细代码和运行测试

选项框

void MainWindow::setComboxWidget(){
    QComboBox *  combox = new QComboBox(this);
    combox->setGeometry(10,10,100,20);
    combox->addItem("广东省");
    combox->addItem("江西省");
    combox->addItem("广西省");
    combox->addItem("北京省");
    combox->addItem("山东省");
    // 设置当前选中的项目
    combox->setCurrentIndex(0);


    // 连接信号槽
    QObject::connect(combox,&QComboBox::currentTextChanged,this,[](const QString& data){
       QMessageBox::information(nullptr,"省份",data,QMessageBox::Yes | QMessageBox::No);
       QMessageBox::warning(nullptr,"省份",data,QMessageBox::Yes | QMessageBox::No);
       QMessageBox::critical(nullptr,"省份",data,QMessageBox::Yes | QMessageBox::No);
       // 显示一个询问消息框
       int result = QMessageBox::question(nullptr, "Question", "Do you want to proceed?",
                                         QMessageBox::Yes | QMessageBox::No);
       if (result == QMessageBox::Yes) {
             // 用户选择了 Yes
         } else {
             // 用户选择了 No
         }
    });

    grid->addWidget(combox,0,0);
}

 字体选项框

void MainWindow::setFontComboxWidget(){
    QFontComboBox* fontcBox = new QFontComboBox(this);
    fontcBox->setGeometry(10,30,100,15);
    QLabel* lab = new QLabel("hello word 你好 世界!",this);
    lab->setGeometry(10,40,100,50);
    QObject::connect(fontcBox,&QFontComboBox::currentFontChanged,this,[lab](const QFont& f){
            lab->setFont(f);
            lab->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
    });

    grid->addWidget(fontcBox,1,1);
}

文本编辑框

1.对输入的数据输出

2.文本只读模式

void MainWindow::setLineEdit(){

    QLineEdit* line = new QLineEdit("账号",this);
    line->setGeometry(10,100,100,15);
    QPushButton* pb = new QPushButton(this);
    pb->setGeometry(110,100,30,15);
    QLabel* lb = new QLabel(this);
    lb->setGeometry(10,110,60,60);
    pb->setText("确认");
    lb->setText("请输入");
    //点击事件clicked   单复选 click
    QObject::connect(pb,&QPushButton::clicked,this,[line,lb](){
        lb->setText(line->text());
    });


}
void MainWindow::setTextEdit(){
    /*
      通常情况下,QTextLine 是通过 QTextLayout 类来管理的。
QTextLayout 负责将文本分割成多个 QTextLine 对象,开发者可以通过 QTextLayout 来访问和操作这些文本行。
*/
    QTextEdit* textEdit = new QTextEdit(this);
    textEdit->setGeometry(10,150,100,50);
    textEdit->setText("This is a sample text.\nThis is another line.");


    QPlainTextEdit* plain = new QPlainTextEdit(this);
    //获取当前路径
    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile f("moc_mainwindow.cpp");
    f.open(QFile::ReadOnly|QFile::Text);

    QTextStream tstr(&f);
    plain->insertPlainText(tstr.readAll());


    QRadioButton* radio = new QRadioButton(this);
    radio->setText("只读模式");
    //点击时发送信号 如果是clicked只有一种状态变化,通过toggled 变化解耦。
    QObject::connect(radio,&QRadioButton::toggled,this,[plain](bool b){
        plain->setReadOnly(b);//设置只读
    });

    plain->setGeometry(10,250,150,150);
    radio->setGeometry(160,250,100,50);
}

整数选择框

通过修改整数,修改颜色透明度。

void MainWindow::setSpinbox() {
    QSpinBox* spinbox = new QSpinBox(this);
    spinbox->setGeometry(200, 10, 90, 50);
    //this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%)}"); // 设置初始透明度为50%
    //数值范围为 0 到 100
    spinbox->setRange(0, 100);
    //步长为 5
    spinbox->setSingleStep(15);
    //初始值为 50
    spinbox->setValue(50);
    //添加前缀和后缀
    spinbox->setPrefix("透明度:");
    spinbox->setSuffix("%");

    //connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(setSpinboxSLOT(int)));

    //QSpinBox::valueChanged因为有多个重载版本   QOverload<int>::of来指定连接 valueChanged(int) 信号
    connect(spinbox, QOverload<int>::of(&QSpinBox::valueChanged), this, [this](int value) {
        this->setStyleSheet(QString("QMainWindow{background-color:rgba(250,220,120,%1%);}").arg(value));
    });
}

 

小数选择框

通过修改美元(小数)得到自己购买的数量。

void MainWindow::setDoubleSpinbox(){
    QDoubleSpinBox* dspin = new QDoubleSpinBox(this);
    dspin->setGeometry(200, 100, 90, 50);
    dspin->setRange(0.0,50.0);

    dspin->setSingleStep(2.1);
    dspin->setValue(0.00);

    dspin->setPrefix("美元:");
    dspin->setSuffix("$");

    int* count=new int(0);
    double* pre =new double(0.0);
    connect(dspin,QOverload<double>::of(&QDoubleSpinBox::valueChanged),this,[count,pre](double cur){
        if(cur > *pre){
            (*count)++;
        }else{
            (*count)--;
        }
        qDebug() << cur <<" "<< (*count);
        *pre = cur; // 更新缓存的上一次值


    });
}

时间选择框

分别有三种类型:只限日期 只限时分   第三种以上两种都有。

void MainWindow::setQTimeEdit(){
    QDateEdit * date = new QDateEdit(this);
    QTimeEdit* timeEdit = new QTimeEdit(this);
    QDateTimeEdit* dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(),this);


    dateTimeEdit->setDisplayFormat("yyyy-MM-dd hh:mm:ss");

    date->setGeometry(200, 150, 190, 20);
    timeEdit->setGeometry(200, 170, 190, 20);
    dateTimeEdit->setGeometry(200, 190, 190, 20);
}

滚动条

分别是垂直滚动条和水平滚动条

void MainWindow::setQScrolbar(){
    QScrollBar* HscrollBar = new QScrollBar(Qt::Horizontal,this);
    HscrollBar->setGeometry(0,400,500,20);
    //最小值、最大值、当前值、单步长和页面步长
    HscrollBar->setMinimum(0);
    HscrollBar->setMaximum(100);
    HscrollBar->setValue(50);
    HscrollBar->setSingleStep(1);
    HscrollBar->setPageStep(10);

    QScrollBar* VscrollBar = new QScrollBar(Qt::Vertical,this);
    VscrollBar->setGeometry(400,0,20,500);

}

快捷键映射操作

根据用户输入 ”Ctrl+q“退出的操作

void MainWindow::setQkeyqueueEdit(){
    QKeySequenceEdit* keySequ = new QKeySequenceEdit(this);
    keySequ->setGeometry(200,200,100,50);

    QObject::connect(keySequ,QOverload<const QKeySequence&>::of(&QKeySequenceEdit::keySequenceChanged),this,[this](const QKeySequence& key){
            qDebug()<<key;
            if(key == QKeySequence("Ctrl+Q")){
                this->close();
            }
    });
}

最后附上源代码链接

对您有帮助的话,帮忙点个star

12-input-widget · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值