找回密码
 立即注册
收起左侧
楼主: yafeilinux

第25篇 数据库(五)SQL表格模型QSqlTableModel

82
回复
60414
查看
[复制链接]
累计签到:3 天
连续签到:1 天
2016-3-23 08:29:46 显示全部楼层
void loginDialog:n_loginBtn_clicked()
{
model = new QSqlTableModel(this);
model->setTable(“user”);
model->select();
int i;
for(i=0;irowCount();i++)
{
QSqlRecord record=model->record(i);
if(record.value(1)==ui->userLineEdit->text()&&
record.value(2)==ui->pwdLineEdit->text())
{
QString str1=”登录成功”;
QString str2=record.value(1).toString();
QMessageBox::information(this,”提示”,str2+str1,QMessageBox::Yes);
accept();
}
else if(record.value(1)==ui->userLineEdit->text()&&
record.value(2)!=ui->pwdLineEdit->text())
{
QMessageBox::information(this,”提示”,”密码输入有误”,QMessageBox::Yes);
ui->userLineEdit->clear();
ui->pwdLineEdit->clear();
ui->userLineEdit->setFocus();
return;
}
QMessageBox::warning(this,”提示”,”用户不存在,请注册”,QMessageBox::Yes);
ui->userLineEdit->clear();
ui->pwdLineEdit->clear();
ui->userLineEdit->setFocus();
return;
}
}
请问应该怎样改,输入用户名和密码显示用户名不存在
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-23 11:49:41 显示全部楼层
studyqt 发表于 2016-3-23 08:29
void loginDialog:n_loginBtn_clicked()
{
model = new QSqlTableModel(this);

看到第一行,model = new QSqlTableModel(this); 这个你放到了按钮的槽里面,就是每次点击按钮都要创建一次model啊?这个放到构造函数里面去执行,不要放到这里。

然后具体怎么做参考  下载 页面最后面的 数据库管理系统源码。
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-3-23 14:57:13 显示全部楼层
yafeilinux 发表于 2016-3-23 11:49
看到第一行,model = new QSqlTableModel(this); 这个你放到了按钮的槽里面,就是每次点击按钮都要创建一 ...

我重新试了一下,密码不一样那个也能使用,就是输入正确的时候,点击登录按钮弹出用户不存在,那一句也放到构造函数里了
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-3-23 15:05:05 显示全部楼层
本帖最后由 studyqt 于 2016-3-23 17:29 编辑
studyqt 发表于 2016-3-23 14:57
我重新试了一下,密码不一样那个也能使用,就是输入正确的时候,点击登录按钮弹出用户不存在,那一句也放 ...

大神,点击登录后 另外一个页面闪退,
if(db.open())
    {
        LoginDialog dlg;
        dlg.show();
        if(dlg.exec() ==Dialog::Accepted)
        {
           Dialog w;
            w.show();
        }

    }
    else
    {
        QMessageBox::information(NULL,"提示","系统载入数据库失败,无法运行",QMessageBox::Yes);
    }这是主函数里的语句,有哪里写的不对吗
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-23 22:46:32 显示全部楼层
studyqt 发表于 2016-3-23 15:05
大神,点击登录后 另外一个页面闪退,
if(db.open())
    {

可以看下第2讲,用如下格式:


  MainWindow w;
   LoginDlg dlg;                        // 建立自己新建的类的对象dlg
   if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下
    {
       w.show();                      // 如果被按下,显示主窗口
       return a.exec();               // 程序一直执行,直到主窗口关闭
   }
   else return 0;        
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2016-4-17 16:28:56 显示全部楼层
请问最后一列的边界与wiget的边界间的空隙如何去掉啊?就是name列与边界间的空隙。谢谢
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-4-17 23:27:09 显示全部楼层
seuStones 发表于 2016-4-17 16:28
请问最后一列的边界与wiget的边界间的空隙如何去掉啊?就是name列与边界间的空隙。谢谢 ...

把列宽放大,或者tableWidget宽度缩小。
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2016-4-18 12:45:58 显示全部楼层
yafeilinux 发表于 2016-4-17 23:27
把列宽放大,或者tableWidget宽度缩小。

开始打算这么实现来着,但是感觉窗口拖拽缩放之后还要重新设置列宽不太方便
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-4-19 12:21:37 显示全部楼层
seuStones 发表于 2016-4-18 12:45
开始打算这么实现来着,但是感觉窗口拖拽缩放之后还要重新设置列宽不太方便 ...

用代码来实现,根据窗口大小自动设置列宽。
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-4-19 12:21:47 显示全部楼层
seuStones 发表于 2016-4-18 12:45
开始打算这么实现来着,但是感觉窗口拖拽缩放之后还要重新设置列宽不太方便 ...

用代码来实现,根据窗口大小自动设置列宽。
回复 支持 反对

使用道具 举报

累计签到:69 天
连续签到:1 天
2016-7-5 21:52:07 显示全部楼层
我觉得可以把最后的插入按钮里的 int id = 10;改为 int id = rowNum +1;这样就永远不会发生id相同的情况
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-7-12 16:29:12 显示全部楼层
请问大神,查到的数据怎么分页,
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-7-19 10:44:48 显示全部楼层
请问大神,如果用QSqlQuery执行sql语句,查询出多行商品,要怎么将它们显示到model中,我现在用的model是StandardIteMModel,QSqlRecord只能存一行数据吗?sql语句大概就是在商品表根据QLineEdit中的数据匹配条码和商品名称查询(like)
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2016-7-19 15:40:24 显示全部楼层
这个比书里讲得更清楚
回复 支持 反对

使用道具 举报

累计签到:53 天
连续签到:1 天
2016-8-11 13:41:13 显示全部楼层
这个模式下 能不能筛选多个条件
回复 支持 反对

使用道具 举报

累计签到:580 天
连续签到:3 天
2016-9-2 11:01:44 显示全部楼层
一枝梅不落 发表于 2016-7-5 21:52
我觉得可以把最后的插入按钮里的 int id = 10;改为 int id = rowNum +1;这样就永远不会发生id相同的情况 ...

嘿嘿,我也是这么改的
回复 支持 反对

使用道具 举报

累计签到:580 天
连续签到:3 天
2016-9-2 11:04:08 显示全部楼层
据说,Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()这两个函数。
所以,把
  //QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
  //QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
更改为
  QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
回复 支持 反对

使用道具 举报

累计签到:580 天
连续签到:3 天
2016-9-2 11:14:12 显示全部楼层
请问,怎么删除多行啊?
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2016-9-23 20:59:28 显示全部楼层
请问在用qsqltablemodel怎么设定表头,改成中文?
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-10-8 22:47:39 显示全部楼层
楼主,请问QT操作数据库如何把主键设置成自增的啊,好像代码里不能直接加auto increment啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了