C++ QT图形界面设计:基本类和语法框架认知

1.helloworld代码框架(QT初认知)

int main(int argc,char *argv[])//程序台控制参数不要乱删,删了就启动不了了
{
  //1.a应用程序对象,在QT中,应用程序对象有且只有一个
  QApplication a(argc,argv);

  //2.窗口对象
  MainWindow w;
  //调用w对象的show方法
  w.show();
  
  
  //--应用程序对象进入消息循环
  //--等待一些消息传递给窗口
  //--让代码阻塞,后面代码是不执行的
  return a.exec();
}

消息循环:这是QT类提供的一个机制,为后续的用户操作提供一个缓冲时间,想好逻辑。

环境使用部署:当需要用到QT中某个方面的比如网络通信这些的时候,需要在.pro文件里面的QT+=那一行指明你加了什么进去
比如说我要用网络通信功能,那么我就应当QT+=core gui network 加上去,实际上在编译过程中会自动添加这些东西进去

2.常用组件:QPushButton以及窗体基本api

头文件:#include < QPushButton >

button使用方法以及绑定方法

  //1.按钮对象创建方法
  QPushButton * btn=new QPushButton();

  //2.按钮指定显示的窗口
  btn->setParent(qw);
  
  //3.显示文本
  btn->setText("登录");

传递参数方法

  QWidget qw;
  QuickDemo qd;
  qd.buttonTest(&qw);
  qw.show();

重置窗口大小方法是resize
移动组件方法是调用其**move()**方法
设置窗口标题是调用其setWindows方法
设置窗口大小使用setFixedSize()方法
除此之外button也可以调整大小

3.常用基类介绍

1.QMainWindow 是主窗口类,主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口;
2.QWidget 是所有具有可视界面类的基类,选择 QWidget 创建的界面对各种界面组件都可以 支持;
3.QDialog 是对话框类,可建立一个基于对话框的界面

4.基本页面布局以及按钮信号槽使用

信号槽
信号槽的使用基本是用于button,用于提交用户数据等,主要绑定方法是右键button然后转到槽,选择clicked(),然后就会自动生成函数,在函数里面编写页面逻辑即可

跳转页面
跳转页面首先需要新建一个页面,可以是mainWiindows(带有菜单栏,使用起来比较方便),也可以是Widget,然后在原页面的头文件里面加上包含新页面的头文件,然后在private里面加入新页面的指针,然后再跳转函数里面调用这个指针就可以了。

  mtb=new MainTable();
  mtb->show();

页面数据提交
首先需要设定好交互框,一般来说,都是用label来做提示作用,然后lineText作输入框,最终提供一个submitPushButton作数据提交,值得注意的是,定义好每个组件的时候都要把objectName给改一下,避免后期认不出来。

5.数据库连接及其基本使用

数据库连接

bool connectToDataBase(){
  QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
  if(db.open()){
      qDebug()<<"数据库打开成功了";
      return true;
  }else{
      qDebug()<<"数据库打开失败!";
      return false;
  }
}

数据库建表方法

  //3.首先创建一个表格
  /*创建表的写法是:创建表格语句:create table <table_name> (f1 type1, f2 type2,…);*/
  QSqlQuery sqlQuery;//声明SQL语句
  QString createSql="CREATE TABLE student(sId varchar primary key,sName varchar,sDorm varchar,sMajor varchar,sBrief varchar,sGrad int,sClass int,sGender int,sAge int)";//声明为创建表的SQL语句
  sqlQuery.prepare(createSql);//将写好的SQL语句放进sqlQuery容器中保存
  //检验是否能完成建表
  if(sqlQuery.exec()){
      qDebug()<<"建立学生表成功!";
  }else{
      qDebug()<<"建立学生表失败!"<<sqlQuery.lastError();
  }

数据库插入数据方法

  //4.向表中插入数据来测试
  //插入语句:insert into <table_name> values (value1, value2,…);
  QString insertSql="INSERT INTO student values(\"202025220227\",\"大司马\",\"泰山区1栋1号\",\"软件工程\",\"喜爱编程\",1,2,1,1)";
  QSqlQuery sqlQuery;
  sqlQuery.prepare(insertSql);
  if(sqlQuery.exec()){
      qDebug()<<"向数据库学生表插入数据成功了";
  }else{
      qDebug()<<"向数据库学生表插入失败了,原因:"<<sqlQuery.lastError();
  }

向数据库中查询数据方法

  //5.向数据库中查询数据
  QString selectSql="select * from student";//查询全部数据
  QSqlQuery sqlQuery;
  sqlQuery.prepare(selectSql);
  if(!sqlQuery.exec()){
     qDebug()<<"查询操作错误!原因:"<<sqlQuery.lastError();
  }else{
      while(sqlQuery.next()){
          QString sId=sqlQuery.value(0).toString();
          qDebug()<<sId;
      }
  }

更新数据库内数据的方法

  //6.更新数据库中的内容
  /*update <table_name> set <f1=value1>, <f2=value2>… where <expression>;*/
  QString testName="张三";
  QString updataSql="update student set sName = :sName where sId = :sId";
  sqlQuery.prepare(updataSql);
  sqlQuery.bindValue(":sName",testName);
  sqlQuery.bindValue(":sId","202025220227");

  if(sqlQuery.exec()){
      qDebug()<<"修改数据成功了!";
  }else{
      qDebug()<<"修改数据失败了,失败原因:"<<sqlQuery.lastError();
  }

用变量来替代字符串的办法
用:和即将要插入的东西绑定变量.

  QString sId="00000002";
  QString insertSql="INSERT INTO student values(:sId,\"大司马\",\"泰山区1栋1号\",\"软件工程\",\"喜爱编程\",1,2,1,1)";
  QSqlQuery sqlQuery;
  sqlQuery.prepare(insertSql);
  sqlQuery.bindValue(":sId",sId);
  if(sqlQuery.exec()){
      qDebug()<<"向数据库学生表插入数据成功了";
  }else{
      qDebug()<<"向数据库学生表插入失败了,原因:"<<sqlQuery.lastError();
  }
  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++写的一个简单的界面演示系统 void CMiniDrawDoc::AddFigure (CFigure *PFigure) { m_FigArray.Add (PFigure); SetModifiedFlag (); } CFigure *CMiniDrawDoc::GetFigure (int Index) { if (Index m_FigArray.GetUpperBound ()) return 0; return (CFigure *)m_FigArray.GetAt (Index); } int CMiniDrawDoc::GetNumFigs () { return m_FigArray.GetSize (); } void CMiniDrawDoc::DeleteContents() { // TODO: Add your specialized code here and/or call the base class int Index = m_FigArray.GetSize (); while (Index--) delete m_FigArray.GetAt (Index); m_FigArray.RemoveAll (); CDocument::DeleteContents(); } void CMiniDrawDoc::OnEditClearAll() { // TODO: Add your command handler code here DeleteContents (); UpdateAllViews (0); SetModifiedFlag (); } void CMiniDrawDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable (m_FigArray.GetSize ()); } void CMiniDrawDoc::OnEditUndo() { // TODO: Add your command handler code here int Index = m_FigArray.GetUpperBound (); if (Index > -1) { delete m_FigArray.GetAt (Index); m_FigArray.RemoveAt (Index); } UpdateAllViews (0); SetModifiedFlag (); } void CMiniDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable (m_FigArray.GetSize ()); } // implementation of figure classes: IMPLEMENT_SERIAL (CFigure, CObject, 3) CRect CFigure::GetDimRect () { return CRect (min (m_X1, m_X2), min (m_Y1, m_Y2), max (m_X1, m_X2) + 1, max (m_Y1, m_Y2) + 1); } void CFigure::Serialize (CArchive& ar) { if (ar.IsStoring ()) ar << m_X1 << m_Y1 << m_X2 << m_Y2 <> m_X1 >> m_Y1 >> m_X2 >> m_Y2 >> m_Color; } IMPLEMENT_SERIAL (CLine, CFigure, 3) CLine::CLine (int X1, int Y1, int X2, int Y2, COLORREF Color, int Thickness) { m_X1 = X1; m_Y1 = Y1; m_X2 = X2; m_Y2 = Y2; m_Color = Color; m_Thickness = Thickness; } void CLine::Serialize (CArchive& ar) { CFigure::Serialize (ar); if (ar.IsStoring ()) ar <> m_Thickness; } void CLine::Draw (CDC *PDC) { CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_SOLID, m_Thickness, m_Color); POldPen = PDC->SelectObject (&Pen); // draw figure: PDC->MoveTo (m_X1, m_Y1); PDC->LineTo (m_X2, m_Y2); // remove pen/brush: PDC->SelectObject (POldPen); } IMPLEMENT_SERIAL (CRectangle, CFigure, 3) CRectangle::CRectangle (int X1, int Y1, int X2, int Y2, COLORREF Color, int Thickness) { m_X1 = X1; m_Y1 = Y1; m_X2 = X2; m_Y2 = Y2; m_Color = Color; m_Thickness = Thickness; } void CRectangle::Serialize (CArchive& ar) { CFigure::Serialize (ar); if (ar.IsStoring ()) ar <> m_Thickness; } void CRectangle::Draw (CDC *PDC) { CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_INSIDEFRAME, m_Thickness, m_Color); POldPen = PDC->SelectObject (&Pen); PDC->SelectStockObject (NULL_BRUSH); // draw figure: PDC->Rectangle (m_X1, m_Y1, m_X2, m_Y2); // remove pen/brush: PDC->SelectObject (POldPen); } IMPLEMENT_SERIAL (CRectFill, CFigure, 3) CRectFill::CRectFill (int X1, int Y1, int X2, int Y2, COLORREF Color) { m_X1 = min (X1, X2); m_Y1 = min (Y1, Y2); m_X2 = max (X1, X2); m_Y2 = max (Y1, Y2); m_Color = Color; } void CRectFill::Draw (CDC *PDC) { CBrush Brush, *POldBrush; CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_INSIDEFRAME, 1, m_Color); POldPen = PDC->SelectObject (&Pen); Brush.CreateSolidBrush (m_Color); POldBrush = PDC->SelectObject (&Brush); // draw figure: PDC->Rectangle (m_X1, m_Y1, m_X2, m_Y2); // remove pen/brush: PDC->SelectObject (POldPen); PDC->SelectObject (POldBrush); } IMPLEMENT_SERIAL (CRectRound, CFigure, 3) CRectRound::CRectRound (int X1, int Y1, int X2, int Y2, COLORREF Color, int Thickness) { m_X1 = min (X1, X2); m_Y1 = min (Y1, Y2); m_X2 = max (X1, X2); m_Y2 = max (Y1, Y2); m_Color = Color; m_Thickness = Thickness; } void CRectRound::Serialize (CArchive& ar) { CFigure::Serialize (ar); if (ar.IsStoring ()) ar <> m_Thickness; } void CRectRound::Draw (CDC *PDC) { CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_INSIDEFRAME, m_Thickness, m_Color); POldPen = PDC->SelectObject (&Pen); PDC->SelectStockObject (NULL_BRUSH); // draw figure: int SizeRound = (m_X2 - m_X1 + m_Y2 - m_Y1) / 6; PDC->RoundRect (m_X1, m_Y1, m_X2, m_Y2, SizeRound, SizeRound); // remove pen/brush: PDC->SelectObject (POldPen); } IMPLEMENT_SERIAL (CRectRoundFill, CFigure, 3) CRectRoundFill::CRectRoundFill (int X1, int Y1, int X2, int Y2, COLORREF Color) { m_X1 = min (X1, X2); m_Y1 = min (Y1, Y2); m_X2 = max (X1, X2); m_Y2 = max (Y1, Y2); m_Color = Color; } void CRectRoundFill::Draw (CDC *PDC) { CBrush Brush, *POldBrush; CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_INSIDEFRAME, 1, m_Color); POldPen = PDC->SelectObject (&Pen); Brush.CreateSolidBrush (m_Color); POldBrush = PDC->SelectObject (&Brush); // draw figure: int SizeRound = (m_X2 - m_X1 + m_Y2 - m_Y1) / 6; PDC->RoundRect (m_X1, m_Y1, m_X2, m_Y2, SizeRound, SizeRound); // remove pen/brush: PDC->SelectObject (POldPen); PDC->SelectObject (POldBrush); } IMPLEMENT_SERIAL (CCircle, CFigure, 3) CCircle::CCircle (int X1, int Y1, int X2, int Y2, COLORREF Color, int Thickness) { m_X1 = min (X1, X2); m_Y1 = min (Y1, Y2); m_X2 = max (X1, X2); m_Y2 = max (Y1, Y2); m_Color = Color; m_Thickness = Thickness; } void CCircle::Serialize (CArchive& ar) { CFigure::Serialize (ar); if (ar.IsStoring ()) ar <> m_Thickness; } void CCircle::Draw (CDC *PDC) { CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_INSIDEFRAME, m_Thickness, m_Color); POldPen = PDC->SelectObject (&Pen); PDC->SelectStockObject (NULL_BRUSH); // draw figure: PDC->Ellipse (m_X1, m_Y1, m_X2, m_Y2); // remove pen/brush: PDC->SelectObject (POldPen); } IMPLEMENT_SERIAL (CCircleFill, CFigure, 3) CCircleFill::CCircleFill (int X1, int Y1, int X2, int Y2, COLORREF Color) { m_X1 = min (X1, X2); m_Y1 = min (Y1, Y2); m_X2 = max (X1, X2); m_Y2 = max (Y1, Y2); m_Color = Color; } void CCircleFill::Draw (CDC *PDC) { CBrush Brush, *POldBrush; CPen Pen, *POldPen; // select pen/brush: Pen.CreatePen (PS_INSIDEFRAME, 1, m_Color); POldPen = PDC->SelectObject (&Pen); Brush.CreateSolidBrush (m_Color); POldBrush = PDC->SelectObject (&Brush); // draw figure: PDC->Ellipse (m_X1, m_Y1, m_X2, m_Y2); // remove pen/brush: PDC->SelectObject (POldPen); PDC->SelectObject (POldBrush); }
C++ 中实现图形用户界面的输入框,可以使用一些 GUI 库,比如 Qt、GTK+、wxWidgets 等。下面以 Qt 为例,演示如何实现一个简单的输入框: ```cpp #include <QApplication> #include <QLineEdit> #include <QMessageBox> #include <QPushButton> #include <QVBoxLayout> #include <QWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *window = new QWidget; window->setWindowTitle("输入框示例"); // 创建一个输入框 QLineEdit *lineEdit = new QLineEdit(window); // 创建一个按钮 QPushButton *button = new QPushButton("确认", window); // 创建一个垂直布局,并将输入框和按钮添加进去 QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(lineEdit); layout->addWidget(button); // 将布局设置为窗口的主布局 window->setLayout(layout); // 连接按钮的点击事件和处理函数 QObject::connect(button, &QPushButton::clicked, [=]() { QString text = lineEdit->text(); QMessageBox::information(window, "输入框示例", "您输入的是:" + text); }); window->show(); return a.exec(); } ``` 在上面的代码中,我们使用了 Qt 库来创建一个简单的输入框窗口。首先创建一个 `QLineEdit` 对象作为输入框,然后创建一个 `QPushButton` 对象作为提交按钮。接着使用 `QVBoxLayout` 布局将它们垂直排列,最后将布局设置为窗口的主布局。 在按钮的点击事件处理函数中,我们使用 `QMessageBox::information` 函数来输出用户输入的内容。 运行程序后,您就可以在窗口中输入文字,并点击按钮提交了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值