QT QTableView 智障OX棋代码

刚接触QTableView的时候随手写的OX棋(九宫棋),后面没完善所以电脑只会随机下棋。。不过也包含了一些基础用法。。

代码如下:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<QStandardItemModel>
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private slots:
    void on_tableView_clicked(const QModelIndex &index);
 
    void on_pushButton_clicked();
    void win(int &w);
 
private:
    Ui::MainWindow *ui;
    QStandardItemModel *model;
    int *w;
};
 
#endif // MAINWINDOW_H
 

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QDateTime>
#include<QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("OOXX棋");
    model = new QStandardItemModel;
    ui->tableView->setModel(model);//显示数据
    ui->tableView->setColumnWidth(1,100);//默认列宽。
    ui->tableView->verticalHeader()->setDefaultSectionSize(100);//默认行高。
 
    for(int i = 0; i < 3; i++)//显示3*3空白
     {
        for(int j = 0; j < 3; j++)
        {
         model->setItem(i,j,new QStandardItem(QString::fromLocal8Bit("")));
         }
     }
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//不能编辑
    ui->tableView->horizontalHeader()->setVisible(false);//不显示表头
    ui->tableView->verticalHeader()->setVisible(false);//不显示序号
    ui->tableView->setSelectionMode(QAbstractItemView::NoSelection);//不可选中
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_tableView_clicked(const QModelIndex &index)
{
    int nRow  = index.row();
    int ncolumn  = index.column();
    int w=0;
    //QString str=model.data(model->index(nRow,ncolumn));
    qDebug()<<model->data(index);
    if(model->data(index)=="")//判断是否为空
    {
        model->setItem(nRow,ncolumn, new QStandardItem("×"));
        model->item(nRow,ncolumn)->setTextAlignment(Qt::AlignCenter);   //居中
        model->item(nRow,ncolumn)->setForeground(QBrush(QColor(255, 0, 0)));//颜色
        qDebug()<<nRow<<"   "<<ncolumn;
 
        win(w);
 
        int panduan=0;
        for(int i = 0; i < 3; i++)//用来判断是否格子填满
         {
            for(int j = 0; j < 3; j++)
            {
                if(model->index(i,j).data().toString()=="")
                {
                    panduan=1;//有空格则等于1
                }
             }
         }
        if(panduan==1)//未结束则继续
        {
            int a=QDateTime::currentDateTime().toString("z").toInt();
            srand(a);
            int randNum1 = (rand()%10)/4;
            int randNum2 = (rand()%10)/4;
            while(model->index(randNum1,randNum2).data().toString()!="")
            {
             randNum1 = (rand()%10)/4;
             randNum2 = (rand()%10)/4;
             }
            model->setItem(randNum1,randNum2, new QStandardItem("o"));
            w=1;
            model->item(randNum1,randNum2)->setTextAlignment(Qt::AlignCenter);
 
            win(w);
        }
        panduan=0;
        for(int i = 0; i < 3; i++)//用来判断是否格子填满
         {
            for(int j = 0; j < 3; j++)
            {
                if(model->index(i,j).data().toString()=="")
                {
                    panduan=1;
                }
             }
         }
        if(panduan==0) QMessageBox::warning(this, "平局", "哇,你居然和傻瓜旗鼓相当");
 
    }
 
}
void MainWindow::win(int &w)
{
    for(int i = 0; i < 3; i++)
    {
        if((model->index(i,0).data().toString()==model->index(i,1).data().toString()&&model->index(i,1).data().toString()==model->index(i,2).data().toString()&&model->index(i,0).data().toString()!=""&&model->index(i,1).data().toString()!=""&&model->index(i,2).data().toString()!="")||
                (model->index(0,i).data().toString()==model->index(1,i).data().toString()&&model->index(1,i).data().toString()==model->index(2,i).data().toString()&&model->index(0,i).data().toString()!=""&&model->index(1,i).data().toString()!=""&&model->index(2,i).data().toString()!="")||
                (model->index(0,0).data().toString()==model->index(1,1).data().toString()&&model->index(1,1).data().toString()==model->index(2,2).data().toString()&&model->index(0,0).data().toString()!=""&&model->index(1,1).data().toString()!=""&&model->index(2,2).data().toString()!="")||
                (model->index(0,2).data().toString()==model->index(1,1).data().toString()&&model->index(1,1).data().toString()==model->index(2,0).data().toString()&&model->index(0,2).data().toString()!=""&&model->index(1,1).data().toString()!=""&&model->index(2,0).data().toString()!=""))
           {
            if(w==0)
            {
                QMessageBox::warning(this, "你赢了!", "恭喜,你赢啦~~好厉害,比傻瓜还聪明~");
            }
            else
            {
                QMessageBox::warning(this, "你输了!", "这...你也能输。。");
            }
            for(int i = 0; i < 3; i++)//显示3*3空白
             {
                for(int j = 0; j < 3; j++)
                {
                 model->setItem(i,j,new QStandardItem(QString::fromLocal8Bit("")));
                 }
             }
            break;
        }
     }
}
 
void MainWindow::on_pushButton_clicked()
{
    for(int i = 0; i < 3; i++)//显示3*3空白
     {
        for(int j = 0; j < 3; j++)
        {
         model->setItem(i,j,new QStandardItem(QString::fromLocal8Bit("")));
         }
     }
}
 

main.cpp

#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}
 


效果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个是一个安全的、匿名的、加密的p2p聊天软件,不会被审查哦!好了,言归正传,本文乃是教程,必须仔细观看。 【创建配置文件】 首先安装后,打开软件,应该是【图片1】里面的样子,让你【创建配置文件,不是帐号】,因为本软件没有中心服务器,所以没有帐号这种东西。创建好后,请看【图片2】设置一下,然后看【图片3】好了,到这里就设置完毕了,下面来告诉大家如何添加好友。 【添加好友】 添加好友请看【图片4】,那里的Tox ID就是刚刚图片3里说的那个,也就是说,你想加好友就必须先要知道别人的Tox ID,如何加好友已经介绍完毕了。 如果关闭软件之后,如何重新登录呢?具体请看【图片6】。 但是如果我们要换地方该怎么办呢?该怎么登录这个“帐号”呢?下面就给大家介绍一下如何再更换地点后,登录这个“帐号” 【移动或删除配置文件】 大家看一下【图片5】里面主要标记了如何导出,没错,这个导出就是导出配置文件,也就是所谓的“帐号”导出之后,大家保存到百度网盘或者QQ网盘等地方,换了地方之后,先安装软件,安装完毕之后,别创建配置文件,而是按【WIN+R】也就是开始菜单里面的运行【图片7】,在【图片7】里有2个运行,都是运行,2选1即可,输入【%appdata%】,直接复制粘贴就OK,然后在打开的文件夹里找Tox文件夹【图片8】点进去,然后把导出的tox文件弄进去。然后打开软件【图片6】然后你的“帐号”记录就有了,需要注意的是,你们最好经常备份这个文件。
Qt QTableView是一个用于显示数据的小部件。它可以让开发人员像在Excel中的表格一样显示和编辑数据。 QTableView支持多种数据显示格式,例如文本,图像和彩色表格。 它还具有丰富的转换和排序功能,可以方便地自定义样式表,折叠单元格,自动滚动和多列排序等功能。 QTableViewQt Model/View机制中的一个视图,是MVC(Model-View-Controller)设计模式的一种实现方式。 Model是存储数据的地方, View主要是界面的展示,而Controller则是用于连接Model和View的逻辑,负责处理用户的行为和数据的交互。在QTableView中,数据模型通常被实现为QAbstractTableModel的子类,专门负责数据的存储和处理。 QTableView则根据模型中的数据来显示表格,并响应用户的操作。 在实际使用中,开发人员需要自定义QAbstractTableModel并提供数据,同时将QTableView连接到模型中。 开发人员还可以使用Qt自带的数据模型(例如QSqlTableModel和QStandardItemModel)来轻松地将数据直接加载到表格中,这使得QTableView适用于各种应用程序,例如数据管理应用程序,报告应用程序,数据录入应用程序等。 总的来说,Qt QTableView提供了一个可定制的数据展示小部件,方便开发人员根据自己的需求来展示和操作不同的数据。由于它的灵活性和易用性,已经成为了许多Qt开发人员不可或缺的必备工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值