Qt入门系列(二)

2022-06-16 15:24:17 浏览数 (1)

文章首发在博主知乎


作业1

需求:点击按钮打开,弹出一个新的菜单,单击按钮关闭,关闭新开的菜单

步骤:

1.新建一个QMainWindow项目

2.在1的基础上新建一个类QMainWIndow2

在Q.h中添加Q2对象和定义函数

代码语言:javascript复制
//实例化对象
  private:
    QPushButton *btn1=new QPushButton("打开",this);
    QPushButton *btn2=new QPushButton("关闭",this);
    MainWindow2 w2;
    //实例化方法
  private slots:
    void showMainWindow2();
    void closeMainWIndow2();

在Q.cpp中实现

代码语言:javascript复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    setFixedSize(600,600);
    //设置第一个pushbutton的属性
    btn1->move(100,100);
    btn1->resize(100,50);

    connect(btn1,&QPushButton::clicked,this,&MainWindow::showMainWindow2);
  

    //第二个pushbutton的属性
    btn2->move(100,200);
    btn2->resize(100,50);
    connect(btn2,&QPushButton::clicked,this,&MainWindow::closeMainWIndow2);
}


 void MainWindow::showMainWindow2()
{
     w2.show();
 }

 void MainWindow::closeMainWIndow2()
 {
     w2.close();
 }

结果显示:

4. QMainWindow

4.1 菜单栏和工具栏

Ubuntu下不显示菜单栏解决办法:

blog.csdn.net/z95295740

解决Ubuntu下Qt不能输入中文的方法:

blog.csdn.net/future_ai

中文字体下载链接:

github.com/fcitx/fcitx-

Ubuntu在root下操作:

360doc.com/content/16/0

基本操作:

代码语言:javascript复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

     //窗口大小
    resize(600,400);

    //菜单栏只能有一个
    //创建菜单栏
    QMenuBar *bar=menuBar();
    //菜单栏放在系统中
    setMenuBar(bar);

    //创建菜单
    QMenu *fileMenu=bar->addMenu("文件");
    QMenu *editMenu=bar->addMenu("编辑");

    //创建菜单项
    QAction *newAction=fileMenu->addAction("新建");
    //添加分割线
    fileMenu->addSeparator();
    QAction *openAction= fileMenu->addAction("打开");

    //工具栏可以有多项
    QToolBar *toolBar=new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolBar);

    //只允许左右停靠
    toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);

    //设置浮动
    toolBar->setFloatable(false);

    //设置移动(总开关)
    toolBar->setMovable(false);

    //工具栏设置内容
    toolBar->addAction(newAction);
    //分割线
    toolBar->addSeparator();
    toolBar->addAction(openAction);

    //工具栏中添加控件
   QPushButton *btn=new QPushButton("aa",this);
   toolBar->addWidget(btn);

}

MainWindow::~MainWindow()
{

}

如图:

4.2 状态栏和浮动窗口

代码语言:javascript复制
  //状态兰,也只能有一个
  QStatusBar *stBar=statusBar();
   //设置到窗口中
  setStatusBar(stBar);
  //放标签控件
  QLabel *label=new QLabel("提示信息",this);
  stBar->addWidget(label);
  //设置在右侧提示信息
  QLabel *label2=new QLabel("右侧提示信息",this);
  stBar->addPermanentWidget(label2);

  //浮动窗口 可以有多个
  QDockWidget *dockWider=new QDockWidget("浮动",this);
  addDockWidget(Qt::BottomDockWidgetArea,dockWider);

 //设置后期停靠区域,只允许上下停靠
  dockWider->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
  //设置中心部件 ,只能有一个
  QTextEdit *edit=new QTextEdit(this);
  setCentralWidget(edit);

显示:

4.3 添加资源文件

ui->自动手动添加

1.把文件拿出来拷贝到项目目录下

选中mainWindow.cpp右键->在Explor中显示->粘贴进来(显示包含的目录)

2.在Q1_Resource最上面右键->添加新文件->Qt->qt resource file->设置名字->生成res.qrc

3.离开res.qrc后无法重新返回,此时右键res.qrc->open in editor->添加前缀->添加文件(全选1中的图片打开,此时全部加载进去)->点击编译

4.编辑代码

代码语言:javascript复制
   //使用添加资源文件 “:   前缀名  文件名”
    ui->actionnew->setIcon(QIcon(":/data/01.pgm"));
    ui->actionopen->setIcon(QIcon(":/data/02.pgm"));

结果显示:

4.4 添加对话框

需求:点击新建按钮,弹出一个对话框

继续上面代码:

代码语言:javascript复制
    //点击新建按钮,弹出一个对话框
    connect(ui->actionnew,&QAction::triggered,[=](){
        //对话框分类
        //模态对话框(不可以对其他窗口进行操作),非模态对话框(可以对其他窗口进行操作)
        //模态创建 阻塞
        QDialog dlg(this);
        dlg.resize(200,100);
        dlg.exec();

        qDebug()<<"模态对话框建立";

        //非模态,创建
        QDialog dlg2(this);//栈上自动销毁
        dlg2.show();

        QDialog *dlg3=new QDialog(this);
        dlg3->resize(200,100);
        dlg3->show();
        //设置属性,关闭时候释放,防止内存泄漏
        dlg3->setAttribute(Qt::WA_DeleteOnClose);
        qDebug()<<"非模态创建";

显示:

4.5 消息对话框

比如弹出的警告,消息,提问等

继续上文代码:

代码语言:javascript复制
 //消息对话框
      //错误对话框
     // QMessageBox::critical(this,"critical","错误");
      //信息对话框
    //  QMessageBox::information(this,"informatio","信息");
      //提问对话框
     if(QMessageBox::Save== QMessageBox::question(this,"ques","提问",
                                                  QMessageBox::Save |                                                                               QMessageBox::Cancel))
     {
         qDebug()<<"保存";
         //执行工作
     }
     else
     {
         qDebug()<<"取消";
         //执行工作
     }

显示:

4.6 其他标准对话框

继续上文代码:

代码语言:javascript复制
      //其他标准对话框
      //颜色对话框
     // QColor color=QColorDialog::getColor(QColor(255,0,0));
     // qDebug()<<"r= "<<color.red()<<"g= "<<color.green()<<"b= "<<color.blue();

      //文件对话框
      //参数1 父亲,参数3 标题,参数3 打开路径,参数4 过滤文件格式
      //返回值是选取的路径
     QString str=QFileDialog::getOpenFileName(this,"打开文件","/home/lyy","(*.txt)");
    qDebug()<<str;

显示:

5. 界面布局

5.1 登录界面

ui界面编程

步骤:

1.选择两次 Label: Line Edit,分别改名字

2.选择两个Push Button

3.选择Widget进行水平对齐

4.选择最大的Widget对以上三个进行竖值对齐

5.选择Horizontal Spacer左右各一个弹簧,进行居中

6.但是登录和退出之间太近了,再插一个弹簧。可以改弹簧属性

7.对以上布局不满意,选中最大的框框,点击打破布局

8.选择Widget,将四个一起放进去,点击删格布局

9.点击各个按钮进行属性设定,比如窗口固定大小,密码隐藏等

显示:

5.2 控件-按钮

Button

1.tool button

添加图片,在ui中天骄

添加资源后,点击按钮,查找icon中添加资源后插入图片

实现左边是图像,右边是用户名

2.Radio Button

单选框,只能单选

比如男女,已婚未婚,选择Group Box进行分组,再做个垂直布局

代码语言:javascript复制
    //设置默认男
    ui->rbtnMan->setChecked(true);
    //选中女后打印信息
    connect(ui->rbtnWoman,&QRadioButton::clicked,[=](){
        qDebug()<<"选中女!";
    });

3.Check Box

多选按钮,可以多选

问卷调查等

代码语言:javascript复制
    //多选按钮,2是选中,0是未选中
    connect(ui->CBox,&QCheckBox::stateChanged,[=](int state){

        qDebug()<<state;
    });

显示:

5.3 Item Widgets

1.List Widget

添加文本框,比如诗

代码语言:javascript复制
 //利用listWidget写诗
    QListWidgetItem *ll=new QListWidgetItem("处和日当无");
    //将一行放入listWidget
    ui->listWidget->addItem(ll);
    //设置水平居中
    ll->setTextAlignment(Qt::AlignHCenter);

    //第二种方法添加
    //QStringList list<string>
    QStringList list;
    //重载类一个左移运算符
    list<<"处和日当无"<<"韩地喝下图"<<"设置盘中参"<<"丽丽戒心库";
    ui->listWidget->addItems(list);

显示:

2.Tree Widget

设置带树,子节点的界面

代码语言:javascript复制
//treeWidget
    //设置水平头
    ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");
    QTreeWidgetItem *liItem=new QTreeWidgetItem(QStringList()<<"力量");
    QTreeWidgetItem *minItem=new QTreeWidgetItem(QStringList()<<"敏捷");
    QTreeWidgetItem *zhiItem=new QTreeWidgetItem(QStringList()<<"智力");
    //加载顶层节点
    ui->treeWidget->addTopLevelItem(liItem);
    ui->treeWidget->addTopLevelItem(minItem);
    ui->treeWidget->addTopLevelItem(zhiItem);
    //追加子节点
    QStringList heroli;
    heroli<<"刚被猪"<<"坦克,8公里射程";
    QTreeWidgetItem *ll=new QTreeWidgetItem(heroli);
    liItem->addChild(ll);

显示:

3.table Widget

做成类似于课程表那种

代码语言:javascript复制
   //table widget
    //做表格
    //设置列数
    ui->tableWidget->setColumnCount(3);
    //设置水平表头
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
   //设置行数
    ui->tableWidget->setRowCount(5);
    //设置正文,0行0列
   // ui->tableWidget->setItem(0,0,QTableWidgetItem("亚瑟"));
    QStringList namelist;
    namelist<<"它色"<<"赵云"<<"关于"<<"张飞"<<"花木兰";

    QList<QString> sexlist;
    sexlist<<"男"<<"女"<<"女"<<"女"<<"男";

    for(int i=0;i<5;i  )
    {
        int col=0;
          ui->tableWidget->setItem(i,col  ,new QTableWidgetItem(namelist[i]));
          ui->tableWidget->setItem(i,col  ,new QTableWidgetItem(sexlist[i]));
          //int 转Qstring
          ui->tableWidget->setItem(i,col  ,new QTableWidgetItem(QString::number(i 18)));
    }

显示:

6. 其他控件

1.Scroll Area

滚动区域框

2.Tool Box

3.Tab Widget

网页

4.Stacked Widget

笔记如下:

参考:黑马程序员

0 人点赞