Qt第一行代码

前言

  • 很久前就想拿到界面相关的技术栈,主要用于调试一些接口和小工具, 关于界面的框架比较多, 有Android,也有Qt之类的, 因为做的后端都是和c/c++打交道,加上Qt可移植很高, 所以就选择它吧。

  • 针对版本,因为前期没有接触太多Qt,索性就从最新的Qt6.6开始吧。

  • 整体感觉Qt还是比较简单的, 只要花销时间即可,不会遇到无法跨越的疑难问题。


组件UI

是选择可视化UI设计还是代码化UI设计, 虽然可视化UI省掉了很多工作量,但:

UI的可视化设计是对用户而言的,其实底层都是C++的代码实现,只是Qt巧妙地进行了处理。
由于界面设计的底层还是C++语言实现的,底层实现的功能比可视化设计更加强大和灵活。
某些界面效果是可视化设计无法完成的。

因为从零开始,后续熟悉组件以及Qt的库相关,所以还是尽量使用代码化UI设计吧。

可视化UI设计

这里不详细展开,大概是通过界面方式使用组件面板中的组件完成界面的设计。

代码化UI设计

  • 砍掉ui相关的指针以及相关的调用。
  • 组件<私有数据>使用指针方式创建,可以集中使用一个init方法初始化,例如initUI();
void QWDlgManual::initUI()
{
   // chkBoxUnder = new QCheckBox(tr("Underline"));
    chkBoxItalic = new QCheckBox(tr("Italic"));
    chkBoxBold = new QCheckBox(tr("Bold"));

    QHBoxLayout *HLay1 = new QHBoxLayout;
    HLay1->addWidget(chkBoxUnder);
    HLay1->addWidget(chkBoxItalic);
    HLay1->addWidget(chkBoxBold);


    rBtnBlack = new QRadioButton(tr("Black"));
    rBtnBlack->setChecked(true);

    rBtnRed = new QRadioButton(tr("Red"));
    rBtnBlue = new QRadioButton(tr("Blue"));

    QHBoxLayout * HLay2 = new QHBoxLayout;
    HLay2->addWidget(rBtnBlack);
    HLay2->addWidget(rBtnRed);
    HLay2->addWidget(rBtnBlue);

    btnOk = new QPushButton(tr("确定"));
    btnCancel = new QPushButton(tr("取消"));
    btnClose = new QPushButton(tr("退出"));

    QHBoxLayout *HLay3 = new QHBoxLayout;
    HLay3->addStretch();
    HLay3->addWidget(btnOk);
    HLay3->addWidget(btnCancel);
    HLay3->addStretch();
    HLay3->addWidget(btnClose);

    txtEdit = new QPlainTextEdit;
    txtEdit->setPlainText("Hello world\n\nIt is my demo");
    QFont font = txtEdit->font();   //获取字体
    font.setPointSize(20);//设置字体
    txtEdit->setFont(font);



    //创建垂直布局,并设置主布局
    QVBoxLayout *VLay = new QVBoxLayout;
    VLay->addLayout(HLay1);
    VLay->addLayout(HLay2);
    VLay->addWidget(txtEdit);
    VLay->addLayout(HLay3);

    setLayout(VLay);    //设置主窗体的主布局
}
  • 信号与槽也采用init的方式初始化, 譬如iniSignalSlots()
void QWDlgManual::iniSignalSlots()
{
    connect(rBtnBlue, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
    connect(rBtnBlack, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
    connect(rBtnRed, SIGNAL(clicked()), this, SLOT(setTextFontColor()));

    connect(chkBoxUnder, SIGNAL(clicked(bool)),this, SLOT(on_chkBoxUnder(bool)));
    connect(chkBoxItalic, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxItalic(bool)));
    connect(chkBoxBold, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxBold(bool)));

    connect(btnOk, SIGNAL(clicked()), this, SLOT(accept()));
    connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
    connect(btnClose, SIGNAL(clicked()), this, SLOT(clise()));

}
  • 实现槽的方法
    没有过于复杂的新东西,比Linux中的信号简单太多 。信号好比是中断,如果熟悉linux环境编程,应该比较熟悉软中断,内核向用户态发信号,用户态可以对信号做一些处理,比如忽略信号或抓捕信号, 其中抓捕信号就好比槽函数。
void QWDlgManual::on_chkBoxItalic(bool checked)
{
    QFont font = txtEdit->font();
    font.setItalic(checked);
    txtEdit->setFont(font);

}

void QWDlgManual::setTextFontColor()
{
    QPalette plet = txtEdit->palette();
    if(rBtnBlue->isChecked()){
        
        plet.setColor(QPalette::Text, Qt::blue);
        
    }
    if(rBtnRed->isChecked())
        plet.setColor(QPalette::Text, Qt::red);
    if(rBtnBlack->isChecked())
        plet.setColor(QPalette::Text, Qt::black);

    txtEdit->setPalette(plet);


}

展望后续

  • 组件/布局的熟悉和使用
  • 网络编程,图像处理, 音视频相关
  • 类似QT的STL之类的东西
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值